MFCアプリケーション。
FromFileを使用して、アルファチャネルビットを含む32ビットPNGファイルをGdiplus::Bitmapにロードしています。
次に、Bitmap :: GetHBitmapを使用して、Gdiplus::BitmapからHBITMAPを取得します。
そのハンドルを使用して、ビットマップをイメージリストに追加します。
そのイメージリストを使用して、ツールバーボタンをツールバーに追加します。
ただし、奇妙な理由で、画像は期待どおりにアルファチャネルを使用していません。アルファチャネルを使用して透明度を決定する代わりに、アルファチャネルの組み合わせと、ピクセルの色を白(0x ?? FFFFFF)にどれだけ近づけて透明度を計算するかを使用します。そのため、白のピクセルが徐々に透明になる画像はまったく表示されませんが、黒のピクセルが徐々に透明になる画像は正しく表示されます。
後でコードを編集して、Bitmap to HBitmapが背景色として透明を使用し、イメージリストとツールバーの背景色が透明になるようにしました。同じ結果が得られました。
また、HBITMAPを使用してCBitmapを取得し、AlphaBlend()メソッドを使用してビットマップビットを事前に乗算してウィンドウに描画しました。これにより、正しく描画されます。
画像リストが32ビットの画像設定であるILC_COLOR32フラグを使用していることを確認しました。
したがって、問題は画像が画像リストまたはツールバーに追加される方法にあることはわかっていますが、これを修正する方法を理解することはできません。
これはすべて動的に行われるため、VisualStudioがアルファチャネルを削除することについて人々が不満を言っているのと同じ問題は発生していません。