2011-01-24 17 views
0

MFCアプリケーションで。MFCツールバーとPNGイメージを透明に使用すると、不正な透明効果が発生する

FromFileを使用して、Gdiplus :: Bitmapにアルファチャンネルビットを含む32ビットPNGファイルをロードしています。

次に、Bitmap :: GetHBitmapを使用して、Gdiplus :: BitmapからHBITMAPを取得します。

このハンドルを使用して、ビットマップをイメージリストに追加します。

ツールバーのボタンをツールバーに追加するためにそのイメージリストを使用します。

しかし、何らかの理由で画像がアルファチャンネルを期待通りに使用していません。アルファチャンネルを使用して透明度を決定するのではなく、アルファチャンネルの組み合わせと透明度を計算するためにピクセルの色を白(0x ?? FFFFFF)にどれくらい近づけるかを使用します。したがって、徐々に透明な白いピクセルを持つイメージはまったく表示されませんが、段階的に透明な黒いピクセルを持つイメージは正しく表示されます。

ビットマップからHBitmapへのビットマップが背景色として透明を使用し、イメージリストとツールバーの背景色が透明で、同じ結果を持つようにコードを編集しました。

また、HBitMAPを使用してCBitmapを取得し、AlphaBlend()メソッドを使用してビットマップビットを事前に乗算してウィンドウに描画すると、これが正しく描画されます。

イメージリストが32ビットイメージ設定ILC_COLOR32フラグを使用していることを確認しました。

イメージがイメージリストまたはツールバーに追加される方法に問題があることはわかっていますが、これを修正する方法を見つけることはできません。

これはすべて動的に行われるため、人々がVisual Studioでアルファチャンネルを削除することについて不平を言っているのと同じ問題はありません。

+0

イメージリストを作成するときに、 'ILC_COLOR32'フラグを指定しますか? –

+0

はい私はその旗を指定します –

+0

*なぜあなたはあなたのコードを*掲載するのではなく、あなたのコードを説明する時間を費やしましたか?ソースコードを読むことができれば、問題をデバッグするのがずっと簡単です。 –

答えて

0

問題が解決しました。白を透明に変換していた、信じられないほど隠されたコードでした。 それはなぜ私を超えていますが、あなたはそれを持っています。

質問を閉じるに自由に感じてください。

関連する問題