非表示ウィンド(=最小化orディスプレイの表示領域外or他ウィンドの裏)の画像をキャプチャーして、画像ファイルへ出力する方法を、教えていただけませんでしょうか?
非表示ウィンドにはWebコントロールを実装し、Web画面を表示させてその画像を取得したいのですが、すべて裏画面のまま完了しなければなりません。
よろしくお願いいたします。
非表示ウィンドウのデバイスコンテキストへの描画はできているんですよね?
ならば、試した訳ではないけど、CBitmap::CreateCompatibleBitmapで
ビットマップに変換できそうです。
表示されていないウィンドウや、ウィンドウ自体は表示されていても、他のウィンドウの陰に隠れて見えない部分などには、何も描画されていなかったような気がします(レイヤードウィンドウを除く)。
そのようなところの画像は、取得できないのでは…
なるほど、OnPaint 内で Hint を参考に必要部分のみ描画している可能性も
ありますね。ならば、CDC::CreateCompatibleDC でメモリDCを作って、
そこへ全部描画するとか。本当にできるかどうか試してませんけど。
WIZ さんは、目的を誤解してらっしゃいません?
非表示ウィンドウに描画したいのではなく、非表示ウィンドウの画像を取得したいみたいですが。
随分時間が経ってしまいましたが、まだ解決ではないようなのでコメントします。
> WIZ さんは、目的を誤解してらっしゃいません?
私の日本語が良くなかったですね。
実際の画面に描画されていないので、本当の意味(?)でのキャプチャは
できないと思います。そこで、裏画面(メモリDC)へ描画して、
CBitmap::CreateCompatibleBitmap を使えないか?・・・という提案でした。
> そこで、裏画面(メモリDC)へ描画して、
> CBitmap::CreateCompatibleBitmap を使えないか?・・・という提案でした。
裏画面へ何を描画するんでしょうか…?
質問は
> 非表示ウィンドにはWebコントロールを実装し、Web画面を表示させてその画像を取得したい
とありますが、「Web コントロールを実装」とは?
これが、HTML パーサーとレンダラーを自力で実装することを指しているのなら、なるほど、確かにメモリ DC に描画してファイルに落とすこともできるでしょう。
WIZ さんは、このことをおっしゃっておられるのでしょうか?
俺は、非表示ウィンドウに WebBrowser コントロールを貼り付けて、そこに指定の URL を読み込ませて、表示結果を取得したい、と読みました。
であれば、不可能です、という回答になります。
> とありますが、「Web コントロールを実装」とは?
> (中略)
> これが、HTML パーサーとレンダラーを自力で実装することを指しているのなら、
> なるほど、確かにメモリ DC に描画してファイルに落とすこともできるでしょう。
確かにぽんさん本人に聞いてみないと分からない点でした。
# 私は他の掲示板でもそうですが、自分の思い込みを前提として議論を進めてし
# まう癖がありますね。
> 俺は、非表示ウィンドウに WebBrowser コントロールを貼り付けて、
> そこに指定の URL を読み込ませて、表示結果を取得したい、と読みました。
> であれば、不可能です、という回答になります。
もし、WebBrowser コントロールの派生クラスを作れるのなら、OnPaint をフック
(オーバライド)して・・・できるかも知れません。
みなさま、大変ありがとうございました。
ご質問しておきながら、非常に遅いレスポンスで大変申し訳ありません。
WebBrowser コントロールを貼り付けて・・・の趣旨でご質問しておりました。方々調べましたが、不可能のようです。
ツイート | ![]() |