注意:画像の表示方法が分からないという方は、まず「コントロールやフォームに画像を表示する」をご覧ください。また、文字列を描画させる方法は「文字を書く」をご覧ください。
ColorオブジェクトをColor.FromArgbメソッドで作成するとき、アルファ値を指定することができます。このアルファ値で透明度を指定することができます。アルファ値は0から255までの整数で、0は完全な透明、255が完全な不透明です。このようにして取得したColorオブジェクトからPenやBrushオブジェクトを作成すれば、半透明の図形や文字を描画することができます。
以下に半透明な四角と文字を描画する例を示します。
'Imports System.Drawing '描画先とするImageオブジェクトを作成する Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height) 'ImageオブジェクトのGraphicsオブジェクトを作成する Dim g As Graphics = Graphics.FromImage(canvas) '画像を背景に描画する Dim bmp As New Bitmap("C:\test.jpg") g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height) bmp.Dispose() '半透明のPenを作成する Dim p As New Pen(Color.FromArgb(128, Color.Red), 12) '四角を描画する g.DrawRectangle(p, New Rectangle(10, 60, 260, 60)) p.Dispose() '半透明のブラシを作成する Dim b = New SolidBrush(Color.FromArgb(128, Color.Yellow)) Dim f As New Font("Arial", 30) '文字列を描画する g.DrawString("DOBON.NET", f, b, 15, 70) b.Dispose() f.Dispose() 'Graphicsオブジェクトのリソースを解放する 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); //画像を背景に描画する Bitmap bmp = new Bitmap("C:\\test.jpg"); g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height); bmp.Dispose(); //半透明のPenを作成する Pen p = new Pen(Color.FromArgb(128, Color.Red), 12); //四角を描画する g.DrawRectangle(p, new Rectangle(10, 60, 260, 60)); p.Dispose(); //半透明のブラシを作成する Brush b = new SolidBrush(Color.FromArgb(128, Color.Yellow)); Font f = new Font("Arial", 30); //文字列を描画する g.DrawString("DOBON.NET", f, b, 15, 70); b.Dispose(); f.Dispose(); //Graphicsオブジェクトのリソースを解放する g.Dispose(); //PictureBox1に表示する PictureBox1.Image = canvas;
半透明の図形を描画して複数の画像が重ね合わさるとき、その品質レベルをGraphics.CompositingQualityプロパティで指定することができます。CompositingQualityプロパティに指定できるCompositingQuality列挙体の値とその意味は次のようなものです(MSDNからの抜粋)。
CompositingQuality列挙体のメンバ名 | 説明 |
---|---|
AssumeLinear | 線形の値であると想定します。 |
Default | 既定の品質。 |
GammaCorrected | ガンマ補正を使用します。 |
HighQuality | 高品質で、低速の複合。 |
HighSpeed | 高速で低品質。 |
Invalid | 無効な品質。 |
以下にCompositingQualityを変更して描画する例を示します。
'Imports System.Drawing '描画先とするImageオブジェクトを作成する Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height) 'ImageオブジェクトのGraphicsオブジェクトを作成する Dim g As Graphics = Graphics.FromImage(canvas) '画像を背景に描画する Dim bmp As New Bitmap("C:\test.jpg") g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height) bmp.Dispose() '半透明のPenを作成する Dim p As New Pen(Color.FromArgb(128, Color.Yellow), 20) '普通に線を描画する g.DrawLine(p, 10, 30, 100, 30) 'ガンマ補正を使用して線を描画する g.CompositingQuality = _ System.Drawing.Drawing2D.CompositingQuality.GammaCorrected g.DrawLine(p, 10, 60, 100, 60) p.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); //画像を背景に描画する Bitmap bmp = new Bitmap("C:\\test.jpg"); g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height); bmp.Dispose(); //半透明のPenを作成する Pen p = new Pen(Color.FromArgb(128, Color.Yellow), 20); //普通に線を描画する g.DrawLine(p, 10, 30, 100, 30); //ガンマ補正を使用して線を描画する g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.GammaCorrected; g.DrawLine(p, 10, 60, 100, 60); p.Dispose(); g.Dispose(); //PictureBox1に表示する PictureBox1.Image = canvas;
今までの例では、半透明の図形は背景の色と混ざり合って(ブレンドされて)描画されます。しかしGraphicsオブジェクトのCompositingModeメソッドをSourceCopyにすると、背景と混ざることなく、上書きされて描画されるようになります。なおCompositingModeメソッドをSourceOverにすると、通常通り混ざり合って描画されます。
通常通り描画したときと、CompositingModeメソッドをSourceCopyにしたときでどのように変わるかを調べるコードを以下に示します。
'Imports System.Drawing '描画先とするImageオブジェクトを作成する Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height) 'ImageオブジェクトのGraphicsオブジェクトを作成する Dim g As Graphics = Graphics.FromImage(canvas) '画像を背景に表示する Dim bmp As New Bitmap("C:\test.jpg") g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height) bmp.Dispose() '半透明のPenを作成する Dim p As New Pen(Color.FromArgb(160, Color.Yellow), 20) '普通に線を描画する g.DrawLine(p, 10, 30, 100, 30) '背景色を上書きするように変更する g.CompositingMode = _ System.Drawing.Drawing2D.CompositingMode.SourceOver g.DrawLine(p, 10, 60, 100, 60) p.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); //画像を背景に表示する Bitmap bmp = new Bitmap("C:\\test.jpg"); g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height); bmp.Dispose(); //半透明のPenを作成する Pen p = new Pen(Color.FromArgb(160, Color.Yellow), 20); //普通に線を描画する g.DrawLine(p, 10, 30, 100, 30); //背景色を上書きするように変更する g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver; g.DrawLine(p, 10, 60, 100, 60); p.Dispose(); g.Dispose(); //PictureBox1に表示する PictureBox1.Image = canvas;
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。