以下の変数を定義して、画像を関連付けしている状態で、
CDC memDC;
CBitmap bmp;
bmpからHBITMAPを取得する方法は、
HBITMAP hImageBmp = bmp;
で正しいでしょうか?
上記で取得したhImageBmpに対して画像を変更出来なくなって困っています。。。
是非、お願いします。
> HBITMAP hImageBmp = bmp;
で CBitmap::operator HBITMAP() が呼び出されますので、
> bmpからHBITMAPを取得する方法
しては正しいでしょう。
> 上記で取得したhImageBmpに対して画像を変更出来なくなって困っています。。。
は、CBitmap bmpの方に問題があるのではないでしょうか?
どんな条件(開発環境や、CBitmap bmpの生成やら中身など)で
何がやりたくて、
どんなソースを書き
どんな不具合状態になってるか
を書いてみたほうがいいと思います
> 上記で取得したhImageBmpに対して画像を変更出来なくなって困っています。。。
どの様なコードでやってますでしょうか。
通常は
1.表示用(コールバックに渡された)HDCのコンパチブルHDCを作成する
2.コンパチブルHDCに当該のHBITMAPをSelect()する
3.コンパチブルHDCに対して描画する
4.コンパチブルHDCを表示用HDCにBitBlt()等をする
のような手順です。
maruさんー>お返事ありがとうございます。
HBITMAP hImageBmp = bmp;
で取得した画像をBITMAPファイルにして確認したのですが、
正常に取得できました。
また、
bmpはmemDCにSelectObjectしています。
その後、bmpの画像を加工するため、
SelectObjectしてBitBlt等を行っても駄目なんです。
関連付けが上手くないのでしょうか?
ryoさんー>お返事ありがとうございます。
VC8.0でMDIにより動作しています。
不具合内容は、描画データをCBitmapで保持しており、
その画像をCDCでは加工出来るのですが、
CBitmapからは加工できません。
仲澤@失業者さんありがとうございます。
解決しました!
通常は、以下の動作かと思いますが。
1.表示用(コールバックに渡された)HDCのコンパチブルHDCを作成する
2.コンパチブルHDCに当該のHBITMAPをSelect()する
3.コンパチブルHDCに対して描画する
4.コンパチブルHDCを表示用HDCにBitBlt()等をする
5.コンパチブルHDCに元HBITMAPをSelect()する
4と5の間で、
2で指定しているHBITMAPを1で作成したコンパチブルDCとは違う、
他のコンパチブルDCにSelectしたかったのです。
そのためには、4と5の間で
・コンパチブルHDCを一度元HBITMAPにSelect
・HBITMAPにてBitBlt
・再度、コンパチブルHDCに当該のHBITMAPをSelect()する
と言った形で行うことが出来ました。
ありがとうございます。
そ~すると、CBitmapのメンバーのHBITMAPが、別のHDCに
Select()されている可能性がありますね。ハンドルのコピーも
同様です。
HBITMAPは複数のHDCに、同時にSelect()することはできません。
素直にCreateBitmap()したハンドルをSelect()したHDCに
CBitmapをBitBltしてから、使用するしかないかもしれません。
が~ん 遅かった
仲澤@失業者さん、ありがとうございます。
>>HBITMAPは複数のHDCに、同時にSelect()することはできません。
そのようですね↑
すっかり見落としていました。
何が原因なのか推測出来なかった分、
わかりづらい質問になりましたが、
明確な内容のお返事ありがとうございます。