B
beilei
Unregistered / Unconfirmed
GUEST, unregistred user!
用以下代码实现屏幕拷贝出现了这样的问题:
1。保存下来的图像是15b的BMP,若把THEBMP设为24b
则速度会慢很多,将近2个数量级。
2。在系统设置为16位色时可以拷贝,当系统为32位色时,得到
的BMP文件大小为0字节
请问是怎么回事,如何解决呢?
代码如下
DeskHWnd := GetDeskTopWindow;
dc := GetDC(DeskHWnd);
ScreenWidth := GetDeviceCaps(dc,HORZRES);
ScreenHeight := GetDeviceCaps(dc,VERTRES);
TheBmp := TBitmap.Create;
TheBmp.Width :=640;
TheBmp.Height := 480;
TheBmp.IgnorePalette :=true;
TheBmp.PixelFormat := pf24bit;
BitBlt(TheBmp.Canvas.Handle, 0,0,640,480,dc, form1.left+5,form1.top+24,SRCCOPY);
Image1.Picture.Bitmap := TheBmp;
Application.ProcessMessages;
TheBmp.Free;
ReleaseDC(DeskHWnd, dc);
// We need a filename to save it to.
// edit1.text:='end';
FName := ExtractFilePath(Application.Exename) + 'capture.bmp';
// Lets save the bitmap to a file.
Image1.Picture.Bitmap.SaveToFile(FName);
end;
1。保存下来的图像是15b的BMP,若把THEBMP设为24b
则速度会慢很多,将近2个数量级。
2。在系统设置为16位色时可以拷贝,当系统为32位色时,得到
的BMP文件大小为0字节
请问是怎么回事,如何解决呢?
代码如下
DeskHWnd := GetDeskTopWindow;
dc := GetDC(DeskHWnd);
ScreenWidth := GetDeviceCaps(dc,HORZRES);
ScreenHeight := GetDeviceCaps(dc,VERTRES);
TheBmp := TBitmap.Create;
TheBmp.Width :=640;
TheBmp.Height := 480;
TheBmp.IgnorePalette :=true;
TheBmp.PixelFormat := pf24bit;
BitBlt(TheBmp.Canvas.Handle, 0,0,640,480,dc, form1.left+5,form1.top+24,SRCCOPY);
Image1.Picture.Bitmap := TheBmp;
Application.ProcessMessages;
TheBmp.Free;
ReleaseDC(DeskHWnd, dc);
// We need a filename to save it to.
// edit1.text:='end';
FName := ExtractFilePath(Application.Exename) + 'capture.bmp';
// Lets save the bitmap to a file.
Image1.Picture.Bitmap.SaveToFile(FName);
end;