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

クリッピング領域を指定して画像の一部を表示する

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

画像の一部だけを表示する方法は「画像の一部を切り取って(トリミングして)表示する」で紹介しましたが、ここでは別の方法を紹介します。

クリッピング領域を定義することにより、画像や図形を描画する領域を限定することが出来ます。クリッピング領域はGraphicsオブジェクトのClipプロパティを設定するか、SetClipメソッドを使用します。ClipプロパティはRegionオブジェクトで指定しますが、SetClipメソッドを使えば、Rectangle構造体やGraphicsPathオブジェクトでも指定できます。

SetClipメソッドによる方法

次の例では、SetClipメソッドにより、矩形 (50, 50)-(100, 80) の領域のみに画像が表示されるようにしています。

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

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

'位置(50, 50)、大きさ100x80の領域のみ描画されるようにする
g.SetClip(New Rectangle(50, 50, 100, 80))
'表示する画像を読み込んでImageオブジェクトを作成する
Dim img As Image = Image.FromFile("C:\test\1.bmp")
'画像を描画する
g.DrawImage(img, 0, 0, img.Width, img.Height)

'リソースを解放する
img.Dispose()
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);

//位置(50, 50)、大きさ100x80の領域のみ描画されるようにする
g.SetClip(new Rectangle(50, 50, 100, 80));
//表示する画像を読み込んでImageオブジェクトを作成する
Image img = Image.FromFile(@"C:\test\1.bmp");
//画像を描画する
g.DrawImage(img, 0, 0, img.Width, img.Height);

//リソースを解放する
img.Dispose();
g.Dispose();

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

Clipプロパティによる方法

次にRegionオブジェクトでクリッピング領域を指定する例を示します。Regionオブジェクトについては、「領域を塗りつぶす」で説明しています。

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

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

'楕円の領域を追加する
Dim gp As New GraphicsPath()
gp.AddEllipse(g.VisibleClipBounds)

'領域を文字列で切り抜く
Dim fnt As New FontFamily("Arial")
gp.AddString("DOBON.NET", fnt, 0, 40, New Point(50, 100), _
             StringFormat.GenericDefault)

'Regionを作成する
Dim rgn As New Region(gp)

'クリッピング領域を変更する
g.Clip = rgn

'画像を読み込んでImageオブジェクトを作成する
Dim img As Image = Image.FromFile("C:\test\1.bmp")
'画像を表示する
g.DrawImage(img, g.VisibleClipBounds)

'リソースを解放する
fnt.Dispose()
img.Dispose()
g.Dispose()

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

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

//楕円の領域を追加する
GraphicsPath gp = new GraphicsPath();
gp.AddEllipse(g.VisibleClipBounds);

//領域を文字列で切り抜く
FontFamily fnt = new FontFamily("Arial");
gp.AddString("DOBON.NET", fnt, 0, 40, new Point(50, 100),
    StringFormat.GenericDefault);

//Regionを作成する
Region rgn = new Region(gp);

//クリッピング領域を変更する
g.Clip = rgn;

//画像を読み込んでImageオブジェクトを作成する
Image img = Image.FromFile(@"C:\test\1.bmp");
//画像を表示する
g.DrawImage(img, g.VisibleClipBounds);

//リソースを解放する
fnt.Dispose();
img.Dispose();
g.Dispose();

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

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

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

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