目次

アルファ値がついたビットマップ画像の読み込み (32ビットARGB bitmapの読み込み) - C#

C#でアルファ値のついたビットマップ画像を読み込みたい場合があります。
通常ビットマップの読み込みはファイルから読み込む場合
Bitmap bmp = new Bitmap("c:\data\alpha.bmp");
で読み込めます。しかし、この方法で読み込んだ場合ビットマップの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してはいけない

説明

Bitmap bmp = new Bitmap(@"c:\data\alpha.bmp");
にてビットマップの読み込みをします。
Rectangle bmBounds = new Rectangle(0,0,bmp.Width,bmp.Height);
にてビットマップ全体を範囲とするRectangleを定義します。
BitmapData bmpd = bmp.LockBits(bmBounds, ImageLockMode.ReadOnly, bmp.PixelFormat);
にてビットマップデータを取得します。ビットマップデータの取得で取得する範囲は先の行で定義したビットマップ全体とします。
Bitmap bmp2 = new Bitmap(bmpd.Width, bmpd.Height, bmpd.Stride, PixelFormat.Format32bppArgb, bmpd.Scan0);
にて新しいビットマップクラスbmp2を作成します。PixelFormatをFormat32bppArgbとしアルファ値を持つビットマップとします。ビットマップデータは先に取得したビットマップデータを用います。

bmp.UnlockBits(bmpd);
でビットマップデータのLockを解除します。
bmp2がアルファ値がついたビットマップとなります。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用

関連するページ

最終更新日: 2024-01-06
作成日: 2010-07-13
iPentec all rights reserverd.