CSharp?
半透明の画像を表示する方法
方法一:
//PictureBox1のGraphicsオブジェクトを取得 Graphics g = PictureBox1.CreateGraphics(); //画像を読み込む Image img = Image.FromFile(@"C:\サンプル.jpg"); //ColorMatrixオブジェクトの作成 System.Drawing.Imaging.ColorMatrix cm = new System.Drawing.Imaging.ColorMatrix(); //ColorMatrixの行列の値を変更して、アルファ値が0.5に変更されるようにする cm.Matrix00 = 1; cm.Matrix11 = 1; cm.Matrix22 = 1; cm.Matrix33 = 0.5F; cm.Matrix44 = 1; //ImageAttributesオブジェクトの作成 System.Drawing.Imaging.ImageAttributes ia = new System.Drawing.Imaging.ImageAttributes(); //ColorMatrixを設定する ia.SetColorMatrix(cm); //ImageAttributesを使用して画像を描画 g.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia); //リソースを開放する img.Dispose(); g.Dispose();
方法二:
/// <summary>
/// アルファブレンドした画像を描写する
/// </summary>
/// <param name="img">ブレンドする画像。背景bgImageはgetBackGroundImage()で取得済</param>
/// <param name="alpha">透過値。0~1の間</param>
private void DrawBrendImage(Image img, float alpha)
{
//ブレンドして表示する背景を準備
Bitmap brendBmp = (Bitmap)bgImage.Clone();
Graphics brendG = Graphics.FromImage(brendBmp);
//System.Drawing.Imaging.ColorMatrixオブジェクトの作成
//ColorMatrixの行列の値を変更して、アルファ値がalphaに変更されるようにする
ColorMatrix cm = new ColorMatrix();
cm.Matrix00 = 1;
cm.Matrix11 = 1;
cm.Matrix22 = 1;
cm.Matrix33 = alpha;
cm.Matrix44 = 1;
//System.Drawing.Imaging.ImageAttributesオブジェクトの作成
//ColorMatrixを設定、ImageAttributesを使用して背景に描画
ImageAttributes ia = new ImageAttributes();
ia.SetColorMatrix(cm);
//アルファブレンドしながら描写
brendG.DrawImage(
img,
new Rectangle(0, 0, img.Width, img.Height),
0, 0,
img.Width, img.Height,
GraphicsUnit.Pixel, ia);
//合成された画像を表示
using (Graphics g = this.CreateGraphics())
{
g.DrawImage(brendBmp, 0, 0);
}
//リソースを開放する
brendG.Dispose();
brendBmp.Dispose();
}
/// <summary>
/// 背景となる画像を取得する。
/// 取得した画像はbgImageに保存。
/// </summary>
private void getBackGroundImage()
{
//表示位置の背景を取得
Rectangle rc;
rc = this.RectangleToScreen(new Rectangle(0, 0, this.Width, this.Height));
bgImage = new Bitmap(
rc.Width,
rc.Height,
PixelFormat.Format32bppArgb
);
using (Graphics gBgImage = Graphics.FromImage(bgImage))
{
gBgImage.CopyFromScreen(
rc.X, rc.Y,
0, 0,
rc.Size,
CopyPixelOperation.SourceCopy);
}
}