在Delphi7中,由函数创建的屏幕截图占用大量内存
我使用了一个函数在Delphi7中创建我的桌面截图。我得到了正确的截图,但是拍摄的图片大小约为3MB。通常,屏幕截图的大小为150KB左右。我不知道为什么。 这是我的密码:在Delphi7中,由函数创建的屏幕截图占用大量内存,delphi,Delphi,我使用了一个函数在Delphi7中创建我的桌面截图。我得到了正确的截图,但是拍摄的图片大小约为3MB。通常,屏幕截图的大小为150KB左右。我不知道为什么。 这是我的密码: procedure TForm1.btnDesktopShotClick(Sender: TObject); VAR ScreenH, ScreenW : Integer; dc : HDC; hWin :Cardinal; bm : TBitMap; begin //get handle of
procedure TForm1.btnDesktopShotClick(Sender: TObject);
VAR
ScreenH, ScreenW : Integer;
dc : HDC;
hWin :Cardinal;
bm : TBitMap;
begin
//get handle of desktop
try
hWin :=GetDesktopWindow;
dc:=getDC(hWin);
ScreenH :=GetDeviceCaps(dc,VertRes);
ScreenW :=GetDeviceCaps(dc,HORZRES );
//set bitmap
bm:=TBitmap.Create;
bm.Width :=ScreenW ;
bm.Height :=ScreenH ;
//copy to dest bitmap
BitBlt(bm.Canvas.Handle,0,0,bm.Width ,bm.Height ,dc,0,0,SRCCOPY );
Image1.Picture.Bitmap.Assign(bm);
Image1.Picture.SaveToFile('screenShotDesktop.jpeg');
finally
ReleaseDC(hWin,DC);
end;
end;
我们将不胜感激
谢谢我怀疑您正在将位图(.bmp)写入.jpg文件。位图不会被压缩,这就是为什么您的图片具有如此大的尺寸。您保存的文件是bmp格式,保存jpeg的示例:
with TJPEGImage.Create do
try
Assign(bm) ;
SaveToFile('screenShotDesktop.jpeg') ;
finally
Free;
end;
JPEG是一种有损格式,输出大小取决于图像的质量(例如,大多数程序都有用于此选项的滑块)和大小。(你的图像有多大?)ResourceTion是1024*768FWIW无损PNG很可能是比JPG想的更好的选择,我看到
bm
正在创建,但我看不到它是免费的。。。