はじめまして、TURARAという者です。
プログラム開発初心者のために分かりにくいところもありますが、
最後まで読んでもらえましたら幸いです。
今回はDIBSectionを利用して、
リソースのビットマップをHBITMAP型に変換するやり方を探しています。
リソースからのビットマップの取り出す方法は分かるのですが、
そのビットマップをHBITMAP型に変換できません。
CreateDIBSection関数を利用して、
ファイルからビットマップを読み込む方法は分かります。
もしご存知方がおりましたら、教えて頂きたいと思い書き込みました。
よろしくお願いします。
開発環境は
WinXP
Microsoft Visual C++ 6.0
です。
CreateDIBSectionの戻り値がHBITMAP型になっているけどこれじゃダメなの?
LoadImage()にLR_CREATEDIBSECTIONを渡して戻り値をHBITMAPにキャスト、では?
ご返答ありがとうございます。
言い方が悪くうまく伝わらなかったようですが、
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関数は調べてみましたが、
リソースでは設定できないようですが、
そのところはどうなのでしょうか?
> CBitmap型のビットマップ(IDB_BULE)を
> HBITMAP型に変換したかったのですが、
>
ということであれば、
CBitmapはoperator HBITMAPが定義されているので、
HBITMAP hBmp (HBITMAP)myBitmap;
でいいと思うのですが。
CreateDIBSectionにこだわる理由がありますか?
> HBITMAP hBmp (HBITMAP)myBitmap;
HBITMAP hBmp = (HBITMAP)myBitmap;
※代入演算子が抜けてしまいました。
イメージバイト配列が欲しいのでしょうか?
これでリソースからビットマップを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);