DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

色を入れ替えて画像を描画する

注意:画像の表示方法が分からないという方は、まず「コントロールやフォームに画像を表示する」をご覧ください。

画像内の白を黒に、黒を白に置き換えて表示するというように、色を変換して画像を表示することが、ColorMapクラス(System.Drawing.Imaging名前空間)と、ImageAttributes.SetRemapTableメソッドを使用することでできます。

次の例では、画像の青を黒に、黒を白に変換して表示しています。

VB.NET
コードを隠すコードを選択
'Imports System.Drawing

'描画先とするImageオブジェクトを作成する
Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height)
'ImageオブジェクトのGraphicsオブジェクトを作成する
Dim g As Graphics = Graphics.FromImage(canvas)

'画像を取得
Dim img As Bitmap = SystemIcons.WinLogo.ToBitmap()

'ColorMapオブジェクトの配列(カラーリマップテーブル)を作成
Dim cms() As System.Drawing.Imaging.ColorMap = _
    {New System.Drawing.Imaging.ColorMap(), _
    New System.Drawing.Imaging.ColorMap()}

'青を黒に変換する
cms(0).OldColor = Color.Blue
cms(0).NewColor = Color.Black
'黒を白に変換する
cms(1).OldColor = Color.Black
cms(1).NewColor = Color.White

'ImageAttributesオブジェクトの作成
Dim ia As New System.Drawing.Imaging.ImageAttributes()
'ColorMapを設定
ia.SetRemapTable(cms)

'画像を普通に描画
g.DrawImage(img, 0, 0)

'色を変換して画像を描画
g.DrawImage(img, New Rectangle(img.Width + 10, 0, img.Width, img.Height), _
    0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia)

'Graphicsオブジェクトのリソースを解放する
g.Dispose()

'PictureBox1に表示する
PictureBox1.Image = canvas
C#
コードを隠すコードを選択
//using System.Drawing;

//描画先とするImageオブジェクトを作成する
Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height);
//ImageオブジェクトのGraphicsオブジェクトを作成する
Graphics g = Graphics.FromImage(canvas);

//画像を取得
Bitmap img = SystemIcons.WinLogo.ToBitmap();

//ColorMapオブジェクトの配列(カラーリマップテーブル)を作成
System.Drawing.Imaging.ColorMap[] cms =
    new System.Drawing.Imaging.ColorMap[] 
        {new System.Drawing.Imaging.ColorMap(),
        new System.Drawing.Imaging.ColorMap()};

//青を黒に変換する
cms[0].OldColor = Color.Blue;
cms[0].NewColor = Color.Black;
//黒を白に変換する
cms[1].OldColor = Color.Black;
cms[1].NewColor = Color.White;

//ImageAttributesオブジェクトの作成
System.Drawing.Imaging.ImageAttributes ia =
    new System.Drawing.Imaging.ImageAttributes();
//ColorMapを設定
ia.SetRemapTable(cms);

//画像を普通に描画
g.DrawImage(img, 0, 0);

//色を変換して画像を描画
g.DrawImage(img, new Rectangle(img.Width + 10, 0, img.Width, img.Height),
    0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia);

//Graphicsオブジェクトのリソースを解放する
g.Dispose();

//PictureBox1に表示する
PictureBox1.Image = canvas;

  • 履歴:
  • 2012/8/2 表示する方法を、PictureBox.Imageプロパティを使った方法に変更。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。