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

时间:2011-12-03 07:37:29

标签: delphi

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

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;

帮助将不胜感激。

由于

2 个答案:

答案 0 :(得分:10)

您保存的文件是bmp格式,例如保存jpeg:

 with TJPEGImage.Create do
 try
   Assign(bm) ;
   SaveToFile('screenShotDesktop.jpeg') ;
 finally
   Free;
 end;

答案 1 :(得分:7)

我怀疑您正在将位图(.bmp)写入.jpg文件。位图不会被压缩,这就是为什么你的图片有这么大的原因。