2

8 ビットの BMP ファイルをロードするときに、このコードに問題があります。

HBITMAP hbm = LoadImageW(NULL, L"C:\\Test.bmp", IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE);

しかし、HBITMAPは 0 で、GetLastErrorも 0 を返します。

問題はどこだ ?

同様の質問が stackoverflow で見られますが、このコードは 8 ビット ビットマップでのみ失敗しました。

MSDN は、この動作について何も言いません。

回答または提案をありがとう。

編集: リソースとしてロードされた同じビットマップが正常に機能します。

オペレーティング システム: Windows XP SP2

編集 2: 昨日、Photoshop でこの画像を開くテストを行いました - 正常、MSPAINT - 正常、Microsoft Agent Character Editor - 失敗、アプリ - 失敗! 今日テストされました - 今動作します!!! 10 分前に再度テストしました - 動作しません。おそらくロックのようなものでしょうか?同様の質問を見つけました: http://social.msdn.microsoft.com/Forums/pl-PL/vcmfcatl/thread/df4aa858-6d59-402d-8d96-6414774fed31

4

3 に答える 3

2

わかった。問題の原因がわかりました。

問題は、 BITMAPINFOHEADERのbiSizeImageメンバーの設定が正しくないことでした。

しかし、寝ない夜に 2 つの画像 (80x80、128x128) をテストしたところ、興味深いことがわかりました。

LoadImageは、0から実際のサイズ + 1052までの不適切なbiSizeImageを含むイメージを正常にロードします。たとえば、80x80 の画像の場合、biSizeImageは 6400 である必要がありますが、 LoadImageは biSizeImageを 0 または1、6401 、または 6402 に設定して画像を読み込みますが、7453 に設定すると失敗します。

LoadImageがbiSizeImage値を持つリソースからのイメージのロードに成功した理由は、まだ疑問が残ります。

于 2012-07-14T09:31:07.477 に答える
1

代わりに GDI+ を使用してみてください。画像操作のためのより多くの機能があります: http://msdn.microsoft.com/en-us/library/windows/desktop/ms535411(v=vs.85).aspx

于 2012-07-13T12:29:57.487 に答える
0

ファイルは にあるので、C:\アクセスする権限がないのでしょうか? 代わりに、デスクトップまたはマイ ドキュメントに配置してみてください。

また、XP SP3 にアップデートしても害はありません。

于 2012-07-12T11:28:45.260 に答える