• ベストアンサー

bitbltからの画像保存ができません。;;(Delphi

dc := getdc(0) ; bitblt( bmp.Canvas.Handle, //転送先デバイスコンテキスト(hdc) 0, //転送先左端の座標(int) 0, //転送先上端の座標(int) 100,      //転送先横の幅(int) 100,      //転送先縦の幅(int) dc, //転送元デバイスコンテキスト(hdc) 0, //転送元左端の座標(int) 0, //転送元上端の座標(int) srccopy) ; //ラスタオペレーション bmp.SaveToFile('C:\cap.bmp'); releasedc(0,dc); bmp.free; 画面の位置をキャプチャーし、ビットマップにしたいのですが、これだけでは足りないのでしょうか? コンパイルは成功するし、BMPはできるのですが、0バイト。 例外処理、tryでくくったり、多少条件文はありますが、基本これが中心の処理です。 親切な方、どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.2

あまり経験はないのですが、bmpのWidthとHeightを指定するとよさそうです。 Windows XP Pro SP2 + Delphi2007で確認しました。 -- var dc: HDC; bmp: TBitmap; begin dc := getdc(0) ; bmp := TBitmap.Create; bmp.Width:=100; bmp.Height:=100; bitblt( bmp.Canvas.Handle, //転送先デバイスコンテキスト(hdc) 0, //転送先左端の座標(int) 0, //転送先上端の座標(int) bmp.Width, //転送先横の幅(int) bmp.Height, //転送先縦の幅(int) dc, //転送元デバイスコンテキスト(hdc) 0, //転送元左端の座標(int) 0, //転送元上端の座標(int) srccopy) ; //ラスタオペレーション bmp.SaveToFile('C:\cap.bmp'); releasedc(0,dc); bmp.free; end; --

noname#49406
質問者

お礼

あ、そういえば、ヴァージョンを書いていませんでした。^^ delphi6でした。w2kです。 結局、理由は、分かりませんでした。 hWndAll := GetDesktopWindow(); hWndDC := GetDC(hWndAll); ReleaseDC(hWndAll, hWndDC); で、問題は解決しました。 HPをまるパクリしてできなかったので、もしかしたら、ヴァージョンやOSによるのかもしれません。 ありがとうございます。

その他の回答 (1)

  • ggaogg
  • ベストアンサー率43% (38/88)
回答No.1

Delphiは全く知らないのですが、Win32APIなら少し・・。 しかし回答数が0なので、とりあえず助言程度ですがためになればと思います。 bitbltで問題が発生しているのか、SaveToFileで問題が発生しているのかで調べ方が変わってきますよね。 (ようはbitbltでコピーできていないのか、SaveToFileが正しく書き込んでいないのか。) というわけで、BitBltの前後でbmp変数の内容をダンプしてみると、問題解決の糸口になると思います。

noname#49406
質問者

お礼

どうやら、コピーできていなかったようです。 デバッグの方法を教えて頂き、ありがとうございます。

関連するQ&A

専門家に質問してみよう