注意:画像の表示方法が分からないという方は、まず「コントロールやフォームに画像を表示する」をご覧ください。
画像の一部だけを表示する方法は「画像の一部を切り取って(トリミングして)表示する」で紹介しましたが、ここでは別の方法を紹介します。
クリッピング領域を定義することにより、画像や図形を描画する領域を限定することが出来ます。クリッピング領域はGraphicsオブジェクトのClipプロパティを設定するか、SetClipメソッドを使用します。ClipプロパティはRegionオブジェクトで指定しますが、SetClipメソッドを使えば、Rectangle構造体やGraphicsPathオブジェクトでも指定できます。
次の例では、SetClipメソッドにより、矩形 (50, 50)-(100, 80) の領域のみに画像が表示されるようにしています。
'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
//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;
次にRegionオブジェクトでクリッピング領域を指定する例を示します。Regionオブジェクトについては、「領域を塗りつぶす」で説明しています。
'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
//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;
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。