キャプチャーを効率よくするには

解決


カレーライズ  2006-04-30 10:59:07  No: 21262  IP: 192.*.*.*

いつもお世話になります。今  キャプチャーの処理を作成していまして、矩形のコントロールの取り込みー保存を行っています。
  今は  ダミー用のFormを準備しそこにTImageを貼り付け、ボタンが押されると  デスクトップのキャプチャーを取得しTImageに読み込ませて、ダミーFormをデスクトップに表示させています。その後指定の矩形エリアを選択するという処理をしています。
ところが  上記の場合問題が発生しています。
 i)  ダミー用のFormを表示させるときに画面が一瞬フラッシュしてしまう。
      TImageには TBitmapのイメージをDrawで処理しています。

ii)  マルチモニターだと キャプチャーから表示までに3〜4秒ぐらい処理にかかってしまいます。
  
  他のキャプチャーソフトでは  フラッシュしないのはもちろんマルチモニターでもすぐに処理が開始できます。私はキャプチャーソフトはダミー画面を作成してつくられるものが多いと思っていたのですが、最近になって直接デスクトップ上に書いているので  フラッシュしたり処理が速いのかと思い始めました。
  何かよりよいキャプチャの方法をご存知かたがいっらしゃいましたらご教授よろしくお願いしたいと思います。

編集 削除
カレーライズ  2006-04-30 11:01:27  No: 21263  IP: 192.*.*.*

一部訂正です。
>フラッシュしたり処理が速いのかと思い始めました。
  フラッシュしなかったり処理が速いのかと思い始めました。

編集 削除
deldel  2006-04-30 13:11:50  No: 21264  IP: 192.*.*.*

私は以下のようにやっていますが、気になるほどちらつきませんが・・・

procedure TFrmScreen.FormCreate(Sender: TObject);
begin
  G_DC := GetWindowDC(0);
end;

procedure TFrmScreen.FormShow(Sender: TObject);
begin
  Im.Width := Screen.Width;
  Im.Height := Screen.Height;
  Im.Picture.Bitmap.Width := Screen.Width;
  Im.Picture.Bitmap.Height := Screen.Height;
  BitBlt(Im.Picture.Bitmap.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, G_DC, 0, 0, SRCCOPY);
  Releasedc(0,G_DC);
end;

編集 削除
カレーライズ  2006-04-30 19:15:24  No: 21265  IP: 192.*.*.*

deldelさん。ありがとうございます。
deldelさんの方法に変更がしたところ  ちらつきもとれました。プラス  ダブルバッファと組み合わせることでうまくいきました。
また何かありましたら  よろしくお願いします。

編集 削除