リソースのビットマップをHBITMAP型に変換する – プログラミング – Home

リソースのビットマップをHBITMAP...
 
通知
すべてクリア

リソースのビットマップをHBITMAP型に変換する


TURARA
 TURARA
(@TURARA)
ゲスト
結合: 21年前
投稿: 2
Topic starter  

はじめまして、TURARAという者です。
プログラム開発初心者のために分かりにくいところもありますが、
最後まで読んでもらえましたら幸いです。

今回はDIBSectionを利用して、
リソースのビットマップをHBITMAP型に変換するやり方を探しています。

リソースからのビットマップの取り出す方法は分かるのですが、
そのビットマップをHBITMAP型に変換できません。
CreateDIBSection関数を利用して、
ファイルからビットマップを読み込む方法は分かります。

もしご存知方がおりましたら、教えて頂きたいと思い書き込みました。
よろしくお願いします。

開発環境は
WinXP
Microsoft Visual C++ 6.0
です。


引用解決済
トピックタグ
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

CreateDIBSectionの戻り値がHBITMAP型になっているけどこれじゃダメなの?


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

LoadImage()にLR_CREATEDIBSECTIONを渡して戻り値をHBITMAPにキャスト、では?


返信引用
TURARA
 TURARA
(@TURARA)
ゲスト
結合: 21年前
投稿: 2
Topic starter  

ご返答ありがとうございます。
言い方が悪くうまく伝わらなかったようですが、
CreateDIBSection関数を利用して、
もともとプログラムにリソースされている
CBitmap型のビットマップ(IDB_BULE)を
HBITMAP型に変換したかったのですが、
CreateDIBSection関数の仮引数の設定の仕方がよく分からないです…(汗)

今のところ、プログラムはこのようになっています。
CBitamap myBitmap;
myBitmap.LordBitmap(IDB_BULE);
HBITMAP hBmp;
unsigned char *dispData;

//hBmp = (HBITMAP)myBitmap;→コレでは無理ですよね^^;

BITMAPINFO bmih;         //IDB_BULEの画像情報を入力してみます
bmih.biSize = sizeof(BITMAPINFOHEADER);
bmih.biWidth = 40;
bmih.biHeight = 40;
bmih.biPlanes = 1;
bmih.biBitCount = 8;
bmih.bmiHeader.biCompression = BI_RGB;
bmih.bmiHeader.biSizeImage = 0;
bmih.bmiHeader.biXPelsPerMeter = 0;
bmih.bmiHeader.biYPelsPerMeter = 0;
bmih.bmiHeader.biClrUsed = 0;
bmih.bmiHeader.biClrImportant = 0;

hBmp = CreateDIBSection(NULL,(BITMAPINFO *)&bmih,   //HBITMAP型に変換?
DIB_RGB_COLORS,(void **)&dispData,NULL,0);

CreateDIBSection関数の4つ目仮引数は、
ビットマップの実体が格納されている場所へのポインタを
格納する変数へのポインタを指定します。
となっているのですが、
結局、CBitmap型のビットマップ(IDB_BULE)はどこで設定したらよいのでしょう?
分かりにくい例でごめんなさい。
設定の仕方をご存知の方はぜひ教えてもらえませんか?

LoadImage関数は調べてみましたが、
リソースでは設定できないようですが、
そのところはどうなのでしょうか?


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

> CBitmap型のビットマップ(IDB_BULE)を
> HBITMAP型に変換したかったのですが、
>
ということであれば、
CBitmapはoperator HBITMAPが定義されているので、

HBITMAP hBmp (HBITMAP)myBitmap;

でいいと思うのですが。
CreateDIBSectionにこだわる理由がありますか?


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

> HBITMAP hBmp (HBITMAP)myBitmap;

HBITMAP hBmp = (HBITMAP)myBitmap;
※代入演算子が抜けてしまいました。


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

イメージバイト配列が欲しいのでしょうか?

これでリソースからビットマップをDIB形式でロードできます。
HBITMAP hbitmap=(HBITMAP)::LoadImage(
アプリケーションのインスタンスハンドル,
MAKEINTRESOURCE(リソースID),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);

イメージバイト配列へのポインタはDIBSECTIONと::GetObject()で取得できます。
DIBSECTION dibsection;
::GetObject(hbitmap,sizeof(dibsection),&dibsection);
//dibsection.dsBm.bmBitsがイメージ配列へのポインタ

CBitmapにするにはこのようにできます。
CBitmap cbitmap;
HBITMAP hbitmap=(HBITMAP)::LoadImage(~);
cbitmap.Attach(hbitmap);


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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