2011-12-03 2 views
2

私はDelphi 7でデスクトップのスクリーンショットを作成するために関数を使用しました。正しいスクリーンショットを取得していますが、撮影サイズは約3 MBです。通常、スクリーンショットのサイズは150KB程度です。なぜ私は分からない。 ここに私のコードです:関数によって作成されたスクリーンショットは、Delphi 7で膨大なメモリを必要とします。

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; 

助けていただければ幸いです。

おかげ

+0

JPEGは非可逆形式では、出力サイズは、例えば、ほとんどのプログラムは、このオプションのスライダーを持っている(品質に依存します)と画像のサイズ。 (画像の大きさはどれくらいですか?) – Thanatos

+0

resoultion is 1024 * 768 – CyprUS

+1

FWIWロスレスPNGはJPGよりも良い選択になる可能性があります –

答えて

10

保存したファイルは、BMP形式、JPEG保存の例である:

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

ありがとうArjen。出来た – CyprUS

7

は、私はあなたが.jpgファイルにビットマップ(.BMP)を書いていると思われます。ビットマップは圧縮されていないので、あなたの画像はそのようなサイズです。

関連する問題