C#でアルファ値のついたビットマップ画像を読み込みたい場合があります。
通常ビットマップの読み込みはファイルから読み込む場合
で読み込めます。しかし、この方法で読み込んだ場合ビットマップのPixelFormatはFormat32bppRgbとなってしまい、アルファチャンネルが無視されてしまいます。アルファチャンネルを含めてビットマップを読み込む場合は以下の方法で読み込みます。
Bitmap bmp = new Bitmap(@"c:\data\alpha.bmp");
Rectangle bmBounds = new Rectangle(0,0,bmp.Width,bmp.Height);
BitmapData bmpd = bmp.LockBits(
bmBounds, ImageLockMode.ReadOnly, bmp.PixelFormat);
Bitmap bmp2 = new Bitmap(bmpd.Width, bmpd.Height,
bmpd.Stride, PixelFormat.Format32bppArgb, bmpd.Scan0);
bmp.UnlockBits(bmpd);
//bmp.Dispose(); //Disposeしてはいけない
にてビットマップの読み込みをします。
にてビットマップ全体を範囲とするRectangleを定義します。
にてビットマップデータを取得します。ビットマップデータの取得で取得する範囲は先の行で定義したビットマップ全体とします。
にて新しいビットマップクラスbmp2を作成します。PixelFormatをFormat32bppArgbとしアルファ値を持つビットマップとします。ビットマップデータは先に取得したビットマップデータを用います。