|   | 
 
|  
 .NET TIPS 
画像の背景部分を透明にするには?[C#、VB]
デジタルアドバンテージ 一色 政彦 
2007/06/07 | 
  | 
 
 
 
 | 
  「TIPS:Windowsフォームで簡単に画像を表示するには?」では、Windowsフォーム上で画像を表示するための手法を紹介している。そのTIPSの方法で画像を表示する際、「その画像の下にあるフォームや画像となじませたい」などの理由から、画像の背景部分を透明にしたいことがある。
 次に示した画像のうちの上の画面は、前掲のTIPSで解説したサンプル・アプリケーションだ。その下は同じ画像の背景を透明にしたものである。
 
  | 
  | 
 
| 背景画像が不透明(上)/透明(下)なサンプル・アプリケーション | 
 
| 下の画像では背景が透けてWindowsフォームの背景色(グレー)が見える。 | 
 このように画像の背景部分を透明にする機能が、Bitmapクラス(System.Drawing名前空間)には用意されている。具体的にはBitmapオブジェクトのMakeTransparentメソッドである。多くの場合、MakeTransparentメソッドのパラメータには何も指定しなくとも、自動的に背景部分が透明になる。
 MakeTransparentメソッドを利用するサンプル・コードは次のとおり。太字部分が今回追記したコードで、それ以外は前掲のTIPSと同じである。
 
private void Form1_Load(object sender, EventArgs e) 
{ 
  string url = 
    "http://www.atmarkit.co.jp/fdotnet/images/fdotnet_m.gif"; 
  WebClient wc = new WebClient(); 
  Stream stream = wc.OpenRead(url); 
  Bitmap bitmap = new Bitmap(stream); 
  stream.Close(); 
 
  // 画像の背景を透明にする 
  bitmap.MakeTransparent(); 
 
  pictureBox1.Image = bitmap; 
  pictureBox1.Location = new Point(0, 0); 
  pictureBox1.Size = bitmap.Size; 
 
  this.ClientSize = bitmap.Size; 
}
 | 
 
 
 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
  Dim url As String = _ 
    "http://www.atmarkit.co.jp/fdotnet/images/fdotnet_m.gif" 
  Dim wc As New WebClient() 
  Dim stream As Stream = wc.OpenRead(url) 
  Dim bitmap As Bitmap = New Bitmap(stream) 
  stream.Close() 
 
  ' 画像の背景を透明にする 
  bitmap.MakeTransparent() 
 
  pictureBox1.Image = bitmap 
  pictureBox1.Location = New Point(0, 0) 
  pictureBox1.Size = bitmap.Size 
 
  Me.ClientSize = bitmap.Size 
End Sub
 | 
 
 
 | 
 
| 画像の背景を透明にするサンプル・コード(Windowsフォーム・コードの一部を抜粋)(上:C#、下:VB) | 
| pictureBox1は、あらかじめWindowsフォームに配置しておいたPictureBoxコントロールである。ちなみにそのPictureBoxコントロールに設定済みの画像の背景を透明にするには、次の例のようなコードを記述すればよい(※PictureBoxコントロールのImageプロパティに設定されているイメージ・オブジェクトがBitmapオブジェクトの画像であることが前提)。
 | 
C#の場合: ((Bitmap)pictureBox1.Image).MakeTransparent(); 
VBの場合: CType(pictureBox1.Image, Bitmap).MakeTransparent() | 
 このコードのように、MakeTransparentメソッドのパラメータを指定せずに呼び出すと、画像の左下隅の1ピクセルの色を透明にする色として取り扱う仕様になっているようだ。従って、左下の1ピクセルが透明にしたい色ではない場合には、透明に置き換えたい色をメソッドのパラメータに直接指定する必要があるので注意してほしい。
 例えば、左「上」隅の1ピクセルの色を透明色として使いたい場合には、次のようにパラメータに指定すればよい。
 
bitmap.MakeTransparent(bitmap.GetPixel(0, 0)); | 
 
 
 
bitmap.MakeTransparent(bitmap.GetPixel(0, 0)) | 
 
 
 | 
 
| 画像の左上隅の1ピクセルの色を透明色として背景を透明にするメソッド呼び出し(上:C#、下:VB) | 
 BitmapオブジェクトのGetPixelメソッドを呼び出すと、画像(=Bitmapオブジェクト)内の指定したピクセルの色をColor構造体(System.Drawing名前空間)の値として取得できる。GetPixelメソッドの第1パラメータには色を取得したいピクセルのX座標を、第2パラメータにはY座標を指定する。
 従って上記コードでは、X座標「0」、Y座標「0」、つまり左上隅のピクセルの色をGetPixelメソッドで取得し、その色をMakeTransparentメソッドのパラメータに指定しているわけである。
 
カテゴリ:クラス・ライブラリ 処理対象:ビットマップ 
カテゴリ:Windowsフォーム 処理対象:PictureBoxコントロール 
使用ライブラリ:Bitmapクラス(System.Drawing名前空間) 
使用ライブラリ:Color構造体(System.Drawing名前空間) 
関連TIPS:TIPS:Windowsフォームで簡単に画像を表示するには? | 
 
|  
 | 
 
generated by  
 | 
 
 
 | 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間