level 10
5xHs
楼主
自己读取BMP 数据 不介入 TBMPMAP BIT类
type
stRGB = packed record //定义 24位图格式
R: Byte;
G: Byte;
B: Byte;
end;
stXRGB = packed record //定义 d3d 表面可以用的格式
X: Byte;
R: Byte;
G: Byte;
B: Byte;
end;
ArrRGB = array of stXRGB; // d3d 表面可以用的格式 的数组 类型
var
SurDesc: D3DSURFACE_DESC; //表面的信息结构
bmpSurface, backSurface: IDirect3DSurface9; //表面指针 1.图像表面 2.后备缓存表面
bmprect: D3DLOCKED_RECT;
bitStream: TFileStream;
stBITHeader: BITMAPFILEHEADER; // BMP 信息头
stBitInfoHeader: BITMAPINFOHEADER;
I: Integer;
rcRGB: stRGB;
pSurfaceData: Pointer;
begin
if not FileExists (FilePath) then
begin
ShowMessage('加载的图片不存在!!!');
Exit;
end;
bitStream:= TFileStream.Create(FilePath, fmOpenRead or fmShareDenyNone);
bitStream.Read(stBITHeader, SizeOf(BITMAPFILEHEADER));
bitStream.Read(stBitInfoHeader, SizeOf(BITMAPINFOHEADER));
m_d3ddev.GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, backSurface);
backSurface.GetDesc(SurDesc);
m_d3ddev.CreateOffscreenPlainSurface(stBitInfoHeader.biWidth, stBitInfoHeader.biHeight, SurDesc.Format, D3DPOOL_SYSTEMMEM, bmpSurface, 0);
m_d3ddev.BeginScene();
bmpSurface.LockRect(bmprect, nil, 0);
pSurfaceData:= bmprect.pBits;
for I := stBitInfoHeader.biWidth * stBitInfoHeader.biHeight - 1 downto 0 do
begin
bitStream.Read(rcRGB, SizeOf(strgb));
ArrRGB(pSurfaceData)[I].R:= rcRGB.R;
ArrRGB(pSurfaceData)[I].G:= rcRGB.G;
ArrRGB(pSurfaceData)[I].B:= rcRGB.B;
end;
bitStream.Free;
bmpSurface.UnlockRect;
m_d3ddev.UpdateSurface(bmpSurface, nil, backSurface, nil);
m_d3ddev.EndScene;
backSurface:= nil;
m_d3ddev.Present(nil, nil, 0, nil);
bmpSurface:= nil;
2017年03月15日 07点03分
1
type
stRGB = packed record //定义 24位图格式
R: Byte;
G: Byte;
B: Byte;
end;
stXRGB = packed record //定义 d3d 表面可以用的格式
X: Byte;
R: Byte;
G: Byte;
B: Byte;
end;
ArrRGB = array of stXRGB; // d3d 表面可以用的格式 的数组 类型
var
SurDesc: D3DSURFACE_DESC; //表面的信息结构
bmpSurface, backSurface: IDirect3DSurface9; //表面指针 1.图像表面 2.后备缓存表面
bmprect: D3DLOCKED_RECT;
bitStream: TFileStream;
stBITHeader: BITMAPFILEHEADER; // BMP 信息头
stBitInfoHeader: BITMAPINFOHEADER;
I: Integer;
rcRGB: stRGB;
pSurfaceData: Pointer;
begin
if not FileExists (FilePath) then
begin
ShowMessage('加载的图片不存在!!!');
Exit;
end;
bitStream:= TFileStream.Create(FilePath, fmOpenRead or fmShareDenyNone);
bitStream.Read(stBITHeader, SizeOf(BITMAPFILEHEADER));
bitStream.Read(stBitInfoHeader, SizeOf(BITMAPINFOHEADER));
m_d3ddev.GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, backSurface);
backSurface.GetDesc(SurDesc);
m_d3ddev.CreateOffscreenPlainSurface(stBitInfoHeader.biWidth, stBitInfoHeader.biHeight, SurDesc.Format, D3DPOOL_SYSTEMMEM, bmpSurface, 0);
m_d3ddev.BeginScene();
bmpSurface.LockRect(bmprect, nil, 0);
pSurfaceData:= bmprect.pBits;
for I := stBitInfoHeader.biWidth * stBitInfoHeader.biHeight - 1 downto 0 do
begin
bitStream.Read(rcRGB, SizeOf(strgb));
ArrRGB(pSurfaceData)[I].R:= rcRGB.R;
ArrRGB(pSurfaceData)[I].G:= rcRGB.G;
ArrRGB(pSurfaceData)[I].B:= rcRGB.B;
end;
bitStream.Free;
bmpSurface.UnlockRect;
m_d3ddev.UpdateSurface(bmpSurface, nil, backSurface, nil);
m_d3ddev.EndScene;
backSurface:= nil;
m_d3ddev.Present(nil, nil, 0, nil);
bmpSurface:= nil;




