2017-08-25 12 views
1

通知ICONINFOには2つのビットマップが含まれています。私が正しく理解すれば、hbmMaskはアイコンのアウトラインで、同時に透明にする部分を指定し、hbmColorはアイコンの実際の色であるHBITMAPです。HBITMAPにアルファチャンネル情報が含まれていますか?

だから、私の質問はhbmMaskが必要な理由、ありますか?アルファチャンネルの情報をhbmColorの中に入れてみませんか?それらを1つのビットマップに結合することはできますか?

さらに、Gdiplus::Bitmapconstructor which accepts a HICONです。このGDI +ビットマップがアルファチャンネル情報を処理できることを意味しますか?

感謝:)

+1

あなたは間違った質問をしています。はい、ビットマップはアルファチャンネルを保存できます。しかし、AlphaBlend(例外的に)を除いて、GDIはアルファチャンネルを尊重しません。本質的に、ビットマップはアルファチャンネルをサポートしますが、APIはサポートしていません。それに加えて、[アイコンファイルはアルファチャンネルのPNG画像を保存できます](https://blogs.msdn.microsoft.com/oldnewthing/20101022-00/?p=12473)ので、そこにマスクは必要ありません。 – IInspectable

+1

@IInspectable質問は、実際にアルファチャンネルを尊重しているGDI +とタグ付けされています。アルファチャンネルをサポートするためにアイコンファイルにはPNG形式は必要ありません。アイコン内の任意の32 bpp画像は、アルファチャンネルを持つことができます。 PNGはオプションの圧縮用です。 – zett42

+0

@ zett42:質問は、 'ICONINFO'、' HBITMAP'、 'HICON'について質問しています。それらはGDI +ではなくWindows APIのデータ型です。 32bppビットマップをアイコンファイルにダンプすることはできますが、[マスクを追加する必要があります](https://blogs.msdn.microsoft.com/oldnewthing/20101021-00/?p=12483/)あなたはアルファチャンネルを使用しています。これはアイコンファイルにマスクがないPNGアイコンとは異なります。 – IInspectable

答えて

2

hbmMaskが必要な理由?アルファチャンネルの の情報をhbmColorに入れないのはなぜですか?

アルファチャンネルは32ビットのビットマップ(8ビットのアルファチャンネル、8ビットの赤、緑、青の各チャンネル)でのみ使用できます。したがって、1〜8 bppビットマップのアイコンは、hbmMaskビットマップのカラービットマップとは別に透明度情報を保存する必要があります。

実際には、アルファチャンネルを持つ32 bppビットマップでも、are required to include the hbmMaskunless the PNG format is usedです。後者の場合、マスクはアルファチャンネルから自動的に導出されます。

さらに、Gdiplus :: Bitmapには、HICONを受け入れるコンストラクタがあります。 GDI +ビットマップがアルファチャンネル の情報を処理できることを意味しますか?

ドキュメントには特に記載されていないので、コンストラクタが32 bpp HICONを32 bppビットマップに変換すると想定するのは安全です。ピクセル形式が適切な場合は、GDI +ビットマップは確かにアルファチャネルを格納することができます(アイコンの場合はPixelFormat32bppARGBが必要です)。

+0

'HBITMAP'にアルファ情報を設定する例がありますか? – hackjutsu

+0

@hackjutsuアルファチャンネルを持つGDI +ビットマップを作成したら、 'Gdiplus :: Graphics * g = Gdiplus :: Graphics :: FromImage(&ビットマップ);を呼び出し、' Graphics'メソッドを使ってアルファチャンネルを操作できます。 – zett42

関連する問題