如何填充完整的BMP格式图

fbiboss 2012-10-12 02:34:49
var
lHwnd: HWND;
lhDC, lhBmp, lhMemDC: Integer;
lRect: TRect;
lBmp: TBitmap;
lStream:TMemoryStream;
begin
lhDC := GetWindowDC(lHwnd);
if lhDC <> 0 then
begin
lhMemDC := CreateCompatibleDC(lhDC);
if lhMemDC <> 0 then
begin
GetWindowRect(lHwnd, lRect);
lhBmp := CreateCompatibleBitmap(lhDC, lRect.Right-lRect.Left, lRect.Bottom-lRect.Top);
if lhBmp <> 0 then
begin
SelectObject(lhMemDC, lhBmp);
if not PrintWindow(lHwnd, lhMemDC, 0) then
ShowMessage( '不成功! ');
lBmp := TBitmap.Create;
lStream := TMemoryStream.Create;

lBmp.Handle := lhBmp;
lBmp.SaveToStream(lStream); {这个lStream好像缺少TBitmapInfoHeader,怎么填充进去啊?}

lBmp.Free;
DeleteObject(lhBmp);
end;
DeleteObject(lhMemDC);
end;
ReleaseDC(lHwnd, lhDC);
end;
...全文
114 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fbiboss 2012-10-12
  • 打赏
  • 举报
回复
如果已经通过这句读出了文件头 ,那剩下的内容怎么读出来啊?

lStream.Read(FileHeader,SizeOf(TBitmapFileHeader));
fbiboss 2012-10-12
  • 打赏
  • 举报
回复
这个不是编译通不过啊,我是想生成一个标准的BMP格式的STREAM,要填充,


FileHeader : TBitmapFileHeader;
InfoHeader : TBitmapInfoHeader;

lStream.Read(FileHeader,SizeOf(TBitmapFileHeader));

这都不会填啊
with InfoHeader do
begin
biSize:=SizeOf(TBitmapInfoHeader);
biWidth:=??;
biHeight:=??;
biPlanes:=1;
biBitCount:=BD_BITCOUNT;
biCompression:=BI_RGB;
biSizeImage:=???;
biXPelsPerMeter:=??;
biYPelsPerMeter:=??;
biClrUsed:=0;
biClrImportant:=0;
end;


这样把文件头读出来,那然后怎么把剩下的读出来啊,然后再组合成一个FileHeader + InfoHeader + 文件内容,怎么弄啊?
  • 打赏
  • 举报
回复
xe2下编译,没问题,执行,没问题……

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧