5xHs 5xHs
关注数: 8 粉丝数: 48 发帖数: 2,116 关注贴吧数: 27
图片贴在D3D 表面上成功 把代码分享出来 自己读取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;
1 下一页