ヘッダー

VB.NET2002対応 VB.NET2003対応 VB2005対応

 

透明色を指定する

1.指定した色を透明する

以下の例では既に画像が表示されているPictureBox1に、PictureBox2の画像の白い部分を透明にして重ねる。

VB.NET2002対応 VB.NET2003対応 VB2005対応

Dim SourceImage As Image = PictureBox2.Image
Dim DestImage As Image = PictureBox1.Image
Dim g As Graphics = Graphics.FromImage(DestImage)
Dim Attr As New Imaging.ImageAttributes

Attr.SetColorKey(Color.White, Color.White) '白を透明色に指定

g.DrawImage(SourceImage, New Rectangle(New Point, SourceImage.Size), 0, 0, SourceImage.Width, SourceImage.Height, GraphicsUnit.Pixel, Attr)

PictureBox1.Refresh()

メモ:PictureBox1PictureBox2にはあらかじめ画像を読み込んでおくなどしてImageプロパティに値をセットしておく必要があります。

メモ:完全に白い部分だけが透明になります。人間の目には白く見えても白と少しでも違う色は透明になりません。

 

2.指定した色の範囲を透明にする

以下の例では既に画像が表示されているPictureBox1に、PictureBox2の画像の薄い灰色の部分から白い部分を透明にして重ねる。

VB.NET2002対応 VB.NET2003対応 VB2005対応

Dim SourceImage As Image = PictureBox2.Image
Dim DestImage As Image = PictureBox1.Image
Dim g As Graphics = Graphics.FromImage(DestImage)
Dim Attr As New Imaging.ImageAttributes
Dim HighColor As Color = Color.FromArgb(255, 255, 255)
'白
Dim LowColor As Color = Color.FromArgb(150, 150, 150) '薄い灰色

Attr.SetColorKey(LowColor, HighColor) '薄い灰色から白の範囲の色を透明色に指定

g.DrawImage(SourceImage, New Rectangle(New Point, SourceImage.Size), 0, 0, SourceImage.Width, SourceImage.Height, GraphicsUnit.Pixel, Attr)

PictureBox1.Refresh()

メモ:PictureBox1PictureBox2にはあらかじめ画像を読み込んでおくなどしてImageプロパティに値をセットしておく必要があります。

 

すぐに試せるサンプル

以下の例ではSample2.bmpの上に白っぽい部分を透明にしてSample1.bmpを重ね、PictureBox1に表示する。

サンプルを実行する前に必要なもの:

PictureBox1

C:\Sample1.bmp    (白い部分のある画像)

C:\Sample2.bmp

VB.NET2002対応 VB.NET2003対応 VB2005対応

Dim SourceImage As Image = Image.FromFile("C:\Sample1.bmp")
Dim DestImage As Image = Image.FromFile("C:\Sample2.bmp")
Dim g As Graphics = Graphics.FromImage(DestImage)
Dim Attr As New Imaging.ImageAttributes
Dim HighColor As Color = Color.FromArgb(255, 255, 255)
'白
Dim LowColor As Color = Color.FromArgb(150, 150, 150) '薄い灰色

Attr.SetColorKey(LowColor, HighColor) '薄い灰色から白の範囲の色を透明色に指定

g.DrawImage(SourceImage, New Rectangle(New Point, SourceImage.Size), 0, 0, SourceImage.Width, SourceImage.Height, GraphicsUnit.Pixel, Attr)

PictureBox1.Image = DestImage

SourceImage.Dispose()

 


VB6対応  VB6ではAPIやDirectX等を使用しますがかなり困難です。