.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メソッドのパラメータに指定しているわけである。End of Article

カテゴリ:クラス・ライブラリ 処理対象:ビットマップ
カテゴリ:Windowsフォーム 処理対象:PictureBoxコントロール
使用ライブラリ:Bitmapクラス(System.Drawing名前空間)
使用ライブラリ:Color構造体(System.Drawing名前空間)
関連TIPS:TIPS:Windowsフォームで簡単に画像を表示するには?

この記事と関連性の高い別の.NET TIPS
画像を読み込むには?
PictureBoxコントロール上に文字を表示するには?
ピクセルの色をHTMLカラーへ変換するには?
画像の一部の領域を切り抜くには?
Windowsフォームで簡単に画像を表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH