質問 |
||
QNo.1956772 | WEBページをイメージとしてキャプチャしたいです | |
---|---|---|
質問者:gilsal |
よくWEBページをBMPで保存するフリーソフトがありますが、(URL2BMP, HTML2JPG, HTML2BMPなど)、あの仕組みを知りたいです。 ・ブラウザを画面表示せずに、 ・WEBページをイメージとしてキャプチャ なんですけど... C#で試行錯誤してます。 AxSHDocVw.AxWebBrowserで、フォームにWebを表示するくらいは出来たんですが... C++でのお答えでもOKです。 また、もし上記ソフトのソースが公開されていれば、その在処でもOKです。 お力お貸しください。よろしくお願いします。 |
|
困り度:
|
||
質問投稿日時: 06/02/10 16:06 |
回答良回答20pt |
|
ANo.3 | How To Print a Form That Is Too Large for the Screen or Page http://support.microsoft.com/kb/230502/en-us で行けそうな気がします。 |
---|---|
回答者:todo36 | |
種類:回答 どんな人:専門家 自信:参考意見 |
|
回答日時: 06/02/13 19:38 |
|
| |
この回答への補足 | ありがとうございます。無事、本懐とげることができました。 SendMessage( hWnd, // 対象ウインドウハンドル WM_PRINT, (WPARAM)hMemDC, // メモリDC PRF_ERASEBKGND | PRF_CHILDREN | PRF_CLIENT | PRF_NONCLIENT | PRF_OWNED); こんなふうですね。WM_PRINTは考えつきませんでした...。 |
この回答へのお礼 | ご回答ありがとうございます。無事、本懐とげることができました。 |
回答良回答10pt |
|
ANo.2 | 1.対象のウインドウのHDCをGetDCで取得 2.CreateDIBSectionでDIBを作成 3.CreateCompatibeDCでメモリDCを作成 4.SelectObjectで3のメモリDCと2のDIBを関連付ける 5.BitBltで1のHDCを3のメモリDCへSRCCOPY 6.DIB(メモリ上)の中に画像情報が入っているので後は煮るなり焼くなり好きにする。 私がわかるのはこれぐらいです。 |
---|---|
回答者:sha-girl | |
種類:アドバイス どんな人:一般人 自信:参考意見 |
|
回答日時: 06/02/13 01:22 |
|
| |
この回答への補足 | 表示されているウインドウならご回答の方法でOKでした。 久しぶりに C + SDK でサンプルを作ってみたりしたのでいい勉強になりました。ありがとうございます。 ウインドウを表示せずにできる方法を引き続きさぐってますので、だれかお知恵を。 |
この回答へのお礼 | ご回答ありがとうございます。無事、本懐とげることができました。 |
回答 |
|
ANo.1 | VC++の場合ですが MFCを使えばブラウザ自体は簡単に作れると思います。 でまずデバイスコンテキストやDIB、BMPのフォーマットについて調べてください。 それらのソフトがやっていることは DCの内容を単にディスプレイ上に表示させずに BMPに変換してファイルに吐き出しているだけだと 思います。 C言語というかGetDC等のWindowsAPIを駆使する 必要があり、 ある程度WindowsプログラムをSDKで 組んだことがないと厳しいと思います。 http://www.kumei.ne.jp/c_lang/sdk/sdk_26.htm JPG変換はまた別の話ですのでおいておきます。 |
---|---|
回答者:sha-girl | |
種類:アドバイス どんな人:一般人 自信:参考意見 |
|
回答日時: 06/02/12 18:25 |
|
| |
この回答への補足 | ご回答ありがとうございます。 「DCの内容を単にディスプレイ上に表示させずに BMPに変換してファイルに吐き出しているだけだと 思います。」 同感です。 ご回答のように、1からブラウザを作って、将来にわたりメンテするド根性があれば、それ作ってDCを変えるだけで済むんですが、 せっかく(俺が仕様だと言わんばかりの)出来合いのブラウザがActiveXで使用できるので... 質問への補足ですが、ファイルに保存することは要求してないです(それであれば前に記したソフトをそのまま使います)。 つまり、コントロールの表示先を「画面上」から「メモリ上」にすり替えできればいいなと思ってる訳です。 コントロール(この際LabelでもScrollBarでもなんでもいいです)には普通、指定した親ウインドウのDCがあてがわれると思いますが、 これをCreateCompatibleDCなりで作ったDCですり替えることができれば、解決しそうな気がしてます。(それができないんです(T_T) )。 ちなみに、WM_PAINTの飛び先(OnPaint)の前後にDCをすり替えるコードを入れてみたりもしたんですが、 子ウインドウが描画されず、あえなく敗退しました。 CでのWindowsプログラムも経験あります。だれか、詳細は省いて結構ですので、似たようなことやったことのある方、ご回答おまちしてます。 |
この回答へのお礼 | この回答にお礼をつける(質問者のみ) |