前回、作成したアイコンは背景が透過されていません。

アイコンファイルをフルカラーで保存する

では背景が透過されたアイコンをファイルとして保存するにはどうすればいいのでしょうか?

アイコンファイルのフォーマットは

アイコンヘッダ……ICOファイルに関する包括的情報を格納している。
ディレクトリ[1..n]……個々の画像に関する包括的情報を格納している。
アイコン画像データ[1..n]……AND/XORビットマップ形式か、PNG形式

このようになっています。

最後のAND/XORビットマップ形式は背景を透過する画像を作成することに使えます。前回のプログラムではANDビットマップをすべて0にしてしまったので背景を透過させることができませんでしたが、適切な処理をすることで背景透過のアイコンをつくることができます。

まずどのようなときに背景を透過させるかを決める必要があります。

今回はパネルの背景色がColor.FromName(“Control”)のときに背景は透明にすることにします。

XORビットマップが1ピクセル4バイトであるのに対してANDビットマップは1ピクセル1ビット(8ピクセル1バイト)というのが問題をややこしくしています。

ここはこう考えます。

背景を透過にする部分をリストの格納して、ANDビットマップを設定するときにリストのなかの値に対象部分があるかどうかで判断します。

これで背景が透明なアイコンを保存することができるようになります。ただこのアイコンはVisualStudioのアイコンエディタでは編集できません(編集可能なのは16色のものだけ)。編集はできませんが、表示はされます。もちろん使用することも可能です。

ただアイコンは一つのファイルで複数サイズに対応できるものもあります。今回作成したものは32×32ピクセルのものだけです。複数サイズに対応するためには

アイコンヘッダ
ディレクトリ[1]
ディレクトリ[2]

ディレクトリ[n]
アイコン画像データ[1]
アイコン画像データ[2]

アイコン画像データ[n]

とすればできます。長くなるのでまた次回。

アイコンを複数のサイズに対応できるファイルとして保存する方法

16×16ピクセルのアイコンを作成しようとしてはまった件