デバイスコンテキストに作成したBMPを保存するには?


kool  2007-02-22 22:05:15  No: 135445

開発環境:WINXP VB6 SP3

現在、デバイスコンテキストに作成したBMPをファイル保存するものを
作成しているのですが、
ひとまずPictureBoxへ作成するサンプルを見つけ、それだと実現したんですが、
PicutureBox抜きでメモリ内で作成してそのままファイルへ流し込みたいのですが、実現できるのでしょうか?

PicutureBoxのVisibleをFalseにすると、自分が描画したものではなく、
FormデザインがBmpに保存されてしまいます。。。

------------------------------------------------------------------
現在のおおまかな処理の流れ

CreateCompatibleDC(Picture1.hDC)

Call デバイスコンテキストへグラフ等を描画する処理

CreateCompatibleBitmap(Picture1.hDC, bmpWidth, bmpHeight)
OldBMP = SelectObject(memDC, memBMP)
rc = BitBlt(memDC, 0, 0, bmpWidth, bmpHeight, Picture1.hDC, 0, 0, SRCCOPY)

Call ビットマップファイルへ保存する処理

-------------------------------------------------------------------


Blue  2007-02-23 00:20:41  No: 135446

可能だと思いますが、VBだとカナリ面倒だと思いますよ。

http://www13.plala.or.jp/kymats/study/multimedia.html

BMPファイルに保存する
あたりを参考にしてください。

ただし、C++ベースの記述なのでVB用に置き換えて解釈してください。
それが出来ないのであればこの方法はあきらめてください。


Blue  2007-02-23 00:32:38  No: 135447

OleCreatePictureIndirect を使えば出来るかも。

ビットマップハンドルからOleCreatePictureIndirect で
stdole.IPictureDispを取得した後SavePictureで保存。
(出来るかは試していないので微妙)

参考
http://jet.breeze.jp/program/tips/vb60img.htm


kool  2007-02-23 10:26:35  No: 135448

さっそくのお返事有難うございます。
一度2つの方法を試してみようと思います。

ちなみにPicutureBoxのデバイスコンテキストは使用したままで
PictureBoxを隠すなり見えない状態(作業領域として使用するだけなので)
で使用することは可能なのでしょうか?
いろいろ試してはいるんですが。。。


K.J.K.  2007-02-23 12:35:16  No: 135449

AutoRedrawプロパティをTrueにしておくとか。
その場合は、ついでにImageプロパティと組み合わせると
楽でしょう。


kool  2007-02-23 14:28:39  No: 135450

ありがとうございます!
AutoRedrawをTrueにすると確かにVisible=Falseに設定しても
問題なくいけました!

しかしなぜそれを設定するといけるのでしょうか?
自分にはその原理がわかりません。。。
後学のためにももし分かれば教えていただけないでしょうか?


Blue  2007-02-23 14:34:32  No: 135451

http://www.mb.ccnw.ne.jp/garger-studio/vbgame/102.html
を参考にしてください。

というか、Google検索で「AutoRredraw」で一番上に来たサイトです。
最低限検索等をしたのち、わからないのであれば質問するようにしましょう。


kool  2007-02-23 15:24:51  No: 135452

申し訳ありません・・・
今までずっと悩んで調べていたのに、解決したうれしさのあまり
ついでしゃばってしまいました;


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加