CBitmapからHBITMAPへ – プログラミング – Home

通知
すべてクリア

[解決済] CBitmapからHBITMAPへ


オッペンハイマー
 オッペンハイマー
(@オッペンハイマー)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

以下の変数を定義して、画像を関連付けしている状態で、
CDC memDC;
CBitmap bmp;

bmpからHBITMAPを取得する方法は、

HBITMAP hImageBmp = bmp;

で正しいでしょうか?
上記で取得したhImageBmpに対して画像を変更出来なくなって困っています。。。

是非、お願いします。


引用未解決
トピックタグ
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> HBITMAP hImageBmp = bmp;
で CBitmap::operator HBITMAP() が呼び出されますので、
> bmpからHBITMAPを取得する方法
しては正しいでしょう。

> 上記で取得したhImageBmpに対して画像を変更出来なくなって困っています。。。
は、CBitmap bmpの方に問題があるのではないでしょうか?


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

どんな条件(開発環境や、CBitmap bmpの生成やら中身など)で
何がやりたくて、
どんなソースを書き
どんな不具合状態になってるか

を書いてみたほうがいいと思います


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

> 上記で取得したhImageBmpに対して画像を変更出来なくなって困っています。。。

どの様なコードでやってますでしょうか。
通常は
 1.表示用(コールバックに渡された)HDCのコンパチブルHDCを作成する
 2.コンパチブルHDCに当該のHBITMAPをSelect()する
 3.コンパチブルHDCに対して描画する
 4.コンパチブルHDCを表示用HDCにBitBlt()等をする
のような手順です。


返信引用
オッペンハイマー
 オッペンハイマー
(@オッペンハイマー)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

maruさんー>お返事ありがとうございます。

HBITMAP hImageBmp = bmp;

で取得した画像をBITMAPファイルにして確認したのですが、
正常に取得できました。

また、
bmpはmemDCにSelectObjectしています。

その後、bmpの画像を加工するため、

SelectObjectしてBitBlt等を行っても駄目なんです。

関連付けが上手くないのでしょうか?

ryoさんー>お返事ありがとうございます。

VC8.0でMDIにより動作しています。

不具合内容は、描画データをCBitmapで保持しており、
その画像をCDCでは加工出来るのですが、
CBitmapからは加工できません。


返信引用
オッペンハイマー
 オッペンハイマー
(@オッペンハイマー)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

仲澤@失業者さんありがとうございます。
解決しました!

通常は、以下の動作かと思いますが。

 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()する

と言った形で行うことが出来ました。

ありがとうございます。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

そ~すると、CBitmapのメンバーのHBITMAPが、別のHDCに
Select()されている可能性がありますね。ハンドルのコピーも
同様です。
HBITMAPは複数のHDCに、同時にSelect()することはできません。
素直にCreateBitmap()したハンドルをSelect()したHDCに
CBitmapをBitBltしてから、使用するしかないかもしれません。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

が~ん 遅かった


返信引用
オッペンハイマー
 オッペンハイマー
(@オッペンハイマー)
ゲスト
結合: 16年前
投稿: 10
Topic starter  

仲澤@失業者さん、ありがとうございます。

>>HBITMAPは複数のHDCに、同時にSelect()することはできません。

そのようですね↑
すっかり見落としていました。

何が原因なのか推測出来なかった分、
わかりづらい質問になりましたが、
明確な内容のお返事ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました