問題の簡単な紹介: bmp 形式のファイルのセットが配置されているzip アーカイブ
を取得しました。そのアーカイブからビットマップをロード(システム オブジェクトを作成) し、そのHBITMAP をクライアントメソッドに渡して画面に表示し
たくありません。
私は自分のタスクを解決するために2つの方法を試しました:
1)一時ファイルを使用する(この方法は正常に機能しますが、ファイル作成時に追加のアクションが必要であり、ユーザーがファイルを作成できる権限を持っている必要があるため、 非効率的だと思います)
hBitmap = (HBITMAP)LoadImage(NULL, fullpath.c_str(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION );
2)必要なファイルをメモリに解凍し、メモリバッファを使用してビットマップを作成します (私の解決策は、SOおよびその他のソースに関する同様の質問からの情報に基づいています)
BITMAPFILEHEADER* bmfh = (BITMAPFILEHEADER*)ibuf;
BITMAPINFOHEADER* bmih = (BITMAPINFOHEADER*)(ibuf + sizeof(BITMAPFILEHEADER));
BITMAPINFO* bmi = (BITMAPINFO*)bmih;
void* pBMPdata = (void*)(ibuf + bmfh->bfOffBits);
hBitmap = CreateDIBitmap(NULL, bmih, CBM_INIT, pBMPdata, bmi, DIB_RGB_COLORS);
2 番目の方法で助けが必要です。 2番目の方法で取得したHBITMAPから画像を読み込むと、黒い四角が表示されます/
更新:3番目の方法
を試しました:
BITMAPFILEHEADER* pBmfh = (BITMAPFILEHEADER*)ibuf;
BITMAPINFOHEADER* pBmih = (BITMAPINFOHEADER*)(ibuf + sizeof(BITMAPFILEHEADER));
BITMAPINFO* pBmi = (BITMAPINFO*)pBmih;
void* pBMPdata = (void*)(ibuf + pBmfh->bfOffBits);
void* pToFill = 0;
hBitmap = CreateDIBSection(NULL, pBmi, DIB_RGB_COLORS, &pToFill, NULL, NULL);
結果:ロードしようとしている画像の寸法を持つ黒い正方形です。
役立つかもしれないアイデアは大歓迎です!