在Delphi7中,由函数创建的屏幕截图占用大量内存

在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

我使用了一个函数在Delphi7中创建我的桌面截图。我得到了正确的截图,但是拍摄的图片大小约为3MB。通常,屏幕截图的大小为150KB左右。我不知道为什么。 这是我的密码:

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
正在创建,但我看不到它是免费的。。。