.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
ピクセルの色をHTMLカラーへ変換するには?
WPF:ウィンドウを透明にするには?[C#/VB]
PictureBoxコントロール上に文字を表示するには?
画像の一部の領域を切り抜くには?
Visual Studio 2012のXAMLデザイナで「色名」により色を指定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間