Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


Delphi/400 画面キャプチャー機能の実装

今回は画面のキャプチャー画像を作成するテクニックをご紹介します。

フォームやコンポーネントはその内容を描画するための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月号より)

   
タイトルとURLをコピーしました