2

リソースからPNGファイルをロードしたい。大まかにMFCの方法があります(CResourceStreamを使用):

CImage img;
CResourceStream str(0, MAKEINTRESOURCE(id), _T("PNG"));
img.Load(&str);
CBitmap *bmp(CBitmap::FromHandle(img.operator HBITMAP());

しかし、プロジェクトはMFCやATLがありません。非MFCスタイルでpngをロードするように書く方法は?私が理解しているように、この目的はGDI+によって達成できます

編集:答えからストリーミングするのロードの適切な実装がありますpng

4

1 に答える 1

3

GDI+ は、IStream またはファイル内の PNG データから HBITMAP を簡単に作成できますが、リソースから IStream に移行するには多少の作業が必要です。

CreateStreamOnHGlobal(NULL, TRUE, &stm) (stm は IStream* 変数) を呼び出すと、基本的に一時的なメモリ内ストリームが提供されます。FindResource、LoadResource、LockResource、および SizeofResource を使用して、リソース データとそのサイズへのポインターを取得できます。これらの両方を取得したら、IStream::Write を使用してリソースから IStream にデータをコピーできます。

PNG データを含む IStream を取得したら、IStream を GDI+ Bitmap コンストラクターに渡し、 GetHBITMAP メソッドを使用して HBITMAP を取得します。

于 2012-06-22T22:45:41.017 に答える