2017-01-12 11 views
-1

私は自分のプロジェクトリソースに格納された.pngをロードしようとしていますが、これはピクチャコントロールで設定するためですが、理由を理解できません。私はいくつかの調査を行い、通常のLoadImage()コールでは.pngが実際にはサポートされていないようです。GDI +を使用せずに自分のリソースから.pngをロードする方法はありますか?

しかし、私はそれを回避することができれば、実際にはビットマップに変換したくありません。

これまでのところ、私はGDI +、あるいは本当に古くからのwin32-apiコードでそれを行う方法に関するリソースしか見つけませんでした。

今日の標準で.pngファイルをネイティブに読み込む方法はありますか?

+0

ネイティブではありません。私はOpenCVを使って、bmp/jpg/png/tiffをとても簡単に開くことができます。 – RyanP

+4

GDI + _今日の(よく、昨日の)標準です。 –

+1

@RyanP:[Windows Imaging Component](https://msdn.microsoft.com/en-us/library/windows/desktop/ee719902.aspx)は、[ネイティブコーデック](https:// msdn .microsoft.com/ja-jp/library/windows/desktop/gg430027.aspx)。そう、はい、これはネイティブに非常に多くサポートされています。 – IInspectable

答えて

2

"新しい"方法は、Direct2DとWICです(Windows Imaging Component and Direct2D Image Viewer Win32 Sampleで示されています)。

しかし、残りのアプリケーションが基本コントロールである場合、Direct2Dは過剰です。イメージは、ある時点でビットマップに変換して、–をGPUかメモリのいずれかに格納してください。–とGDI +はこの使用例に適しています。

これらのリソースがアイコンまたはその他の小さなファイル(< 2mp)である場合は、そのリソースをビットマップとして埋め込むことをおすすめします。アセットパイプラインをPNGにしておくことができます。事前ビルドステップを追加してPNGを事前乗算されたBGRAビットマップに変換し、LoadResourceを使用します。そこにはこの必要性を満たすためにare pre-built toolsがあります。

+0

WICはHBITMAPに変換できないため、 Direct2D?それは奇妙な監視のように聞こえます。 – andlabs

+0

ビットマップの読み込み機能は、BMPファイルのアルファ透明度をサポートしていません(ファイル形式であっても)。アルファ透明度が必要な場合は、PNGを使用する必要があります。 – IInspectable

+1

@andlabs、WICはピクセルバッファに変換することができます。そこから 'HBITMAP'を作成できますが、それはできません。 – Mitch

関連する問題