3

(これは、Win32/GDI (可能であれば GDI+ なし) を使用して PNG 画像を読み込むにはどうすればよいですか?に関する質問に関連しています。)

こんにちは、みんな、

ID を持つバイナリ ファイルに埋め込まれた PNG リソースがIDB_PNG1あり、LPDRAWITEMSTRUCT描画する (つまりHDC、ターゲットの四角形があることを意味します) ことを考えると、StretchDIBits? 私はBitBltTransparentBlt以前に作業しましたがStretchDIBits、動作が異なるLoadImageようで、PNG では動作しないようです。

ありがとうございました!

(注: 私が入れた言語は C++ ですが、それはそれほど重要ではありません... C、C#、Visual Basic などでも問題ありません。必要な正確なコードではなく、手順を理解しようとしているだけです。)

4

2 に答える 2

9

リソースからPNGをロードしてHBITMAPに変換する( WICを使用)完全なコードサンプルを含むブログ投稿(C ++でのスプラッシュ画面の表示について)を作成しました。次に、CreateCompatibleDC、SelectObject、およびBitBltを使用して、ターゲットHDCに表示できます。

私はこれまで試したことがありませんが、リソースから生のバイトをメモリにロードし、幅、高さなどを使用してBITMAPINFOHEADER構造体を設定すると、StretchDIBitsを使用してPNGを直接表示できるはずです。このMSDNサンプル

System.Drawing(GDI +のラッパー)またはSystem.Windows.Media.Imaging(WPFアプリの場合)を使用して画像の読み込みと描画を処理できるため、C#とVB.NETのソリューションはまったく異なります。

于 2010-12-31T05:18:59.423 に答える
1

ビットマップ内の PNG サポートは、実際にはプリンター ドライバーでのみ使用されると思います。画面を表示するには、おそらくlibpngなどのコードを使用して PNG データを自分で解凍する必要があります。

于 2010-12-31T04:27:01.170 に答える