今回は画面のキャプチャー画像を作成するテクニックをご紹介します。
フォームやコンポーネントはその内容を描画するためのCanvasを持っています。
この内容をそっくりそのままBitmapにする、
いわゆる画面キャプチャー、スクリーンショットを画像として出力する機能が実装できます。
但し、フォームのCanvas等ではキャプション部分を除いたクライアント領域部分しか
Canvas内に存在しませんのでご注意ください。
設定方法
以下のロジックは、ButtonのClickイベント等の適当なイベントを作成し、
フォームのクライアント領域のBitmapを
「c:\Temp」フォルダに「Test.bmp」として作成するサンプルです。
procedure TForm1.Button1Click(Sender: TObject); var BMP: TBitmap; RCT: TRect; begin //*** TempフォルダにTest.bmpを作成します。 *** BMP := TBitmap.Create; try // Bitmapの色数を指定します。 BMP.PixelFormat := pf24bit; // Bitmapの大きさを指定します。 BMP.Width := Form1.ClientWidth; BMP.Height := Form1.ClientHeight; // コピー範囲の大きさを指定します。 RCT := Rect(0, 0, BMP.Width, BMP.Height); // Bitmapデータを作成します。 BMP.Canvas.CopyRect(RCT, Form1.Canvas, RCT); // Bitmapデータをファイルとして保存します。 BMP.SaveToFile('C:\Temp\Test.bmp'); finally BMP.Free; end; end;
Bitmapオブジェクトを作成し、そのCanvasにFormのCanvasの内容をコピーするだけです。
ここではFormのクライアント領域と同じ大きさのBitmapを、Tempフォルダに
固定ファイル名で作成しています。
拡大や特定のコンポーネントのみのBitmapを作成することも可能ですので、工夫してご活用ください。
尚、以下にJPEGファイルとして保存する例を記載しておきます。
uses節に「Vcl.Imaging.jpeg」を追加する必要がありますので、ご注意ください。
(※XE以前のバージョンでは「JPEG」を追加)
procedure TForm2.Button2Click(Sender: TObject); var BMP: TBitmap; JPG: TJPEGImage; RCT: TRect; begin //*** TempフォルダにTest.jpgを作成します。 *** BMP := TBitmap.Create; try // Bitmapの色数を指定します。 BMP.PixelFormat := pf24bit; // Bitmapの大きさを指定します。 BMP.Width := Form1.ClientWidth; BMP.Height := Form1.ClientHeight; // コピー範囲の大きさを指定します。 RCT := Rect(0, 0, BMP.Width, BMP.Height); // Bitmapデータを作成します。 BMP.Canvas.CopyRect(RCT, Form1.Canvas, RCT); JPG := TJpegImage.Create; try // BitmapデータをJPEGデータに変換します。 JPG.Assign(BMP); // JPEGデータをファイルとして保存します。 JPG.SaveToFile('C:\Temp\Test.jpg'); finally JPG.Free; end; finally BMP.Free; end; end;
<出力画像イメージ>
(ミガロ.情報マガジン「MIGARO News!!」Vol.207 2018年2月号より)