文字を描く補足:画像の表示方法が分からない、描画した絵が消えて困るなどという方は、まず「画像ファイルを表示する」をご覧ください。また、ブラシについては、「塗りつぶした図形を描く」をご覧ください。 文字を描画するには、Graphics.DrawStringメソッドを用います。この時使用するフォントとブラシ(何色で表示するか)と表示位置を指定する必要があります。 簡単な例として、ピクチャボックス「PictureBox1」にフォント「MS UI Gothic」、大きさ20ポイントで青色の文字を描画するコードを示します。 [VB.NET] 'PictureBox1のGraphicsオブジェクトを取得 Dim g As Graphics = PictureBox1.CreateGraphics() 'フォントオブジェクトの作成 Dim fnt As New Font("MS UI Gothic", 20) '文字列を位置(0,0)、青色で表示 g.DrawString("これはテストです。", fnt, Brushes.Blue, 0, 0) 'リソースを開放する fnt.Dispose() g.Dispose() [C#] //PictureBox1のGraphicsオブジェクトを取得 Graphics g = PictureBox1.CreateGraphics(); //フォントオブジェクトの作成 Font fnt = new Font("MS UI Gothic", 20); //文字列を位置(0,0)、青色で表示 g.DrawString("これはテストです。", fnt, Brushes.Blue, 0, 0); //リソースを開放する fnt.Dispose(); g.Dispose(); 折り返して描画する次のようにRectangle構造体を指定すると、その内部に文字列が納まるように自動的に折り返されます。 [VB.NET] 'PictureBox1のGraphicsオブジェクトを取得 Dim g As Graphics = PictureBox1.CreateGraphics() Dim drawString As String = "智に働けば角が立つ。情に棹させば流される。" _ + vbCrLf + "意地を通せば窮屈だ。とかくに人の世は住みにくい。" 'Fontを作成 Dim fnt As New Font("MS ゴシック", 12) '文字列を表示する範囲を指定する Dim rect As New RectangleF(10, 10, 100, 200) 'rectの四角を描く g.FillRectangle(Brushes.White, rect) '文字を書く g.DrawString(drawString, fnt, Brushes.Black, rect) 'リソースを開放する fnt.Dispose() g.Dispose() [C#] //PictureBox1のGraphicsオブジェクトを取得 Graphics g = PictureBox1.CreateGraphics(); string drawString= @"智に働けば角が立つ。情に棹させば流される。 意地を通せば窮屈だ。とかくに人の世は住みにくい。"; //Fontを作成 Font fnt = new Font("MS ゴシック", 12); //文字列を表示する範囲を指定する RectangleF rect = new RectangleF(10, 10, 100, 200); //rectの四角を描く g.FillRectangle(Brushes.White, rect); //文字を書く g.DrawString(drawString, fnt, Brushes.Black, rect); //リソースを開放する fnt.Dispose(); g.Dispose();
縦書きで描画する次のサンプルではStringFormatを指定することにより、文字を縦書きで書いています。フォントは縦書き用のものを使います。 [VB.NET] 'PictureBox1のGraphicsオブジェクトを取得 Dim g As Graphics = PictureBox1.CreateGraphics() Dim drawString As String = "テストです。" 'Fontオブジェクトの作成(太字にする) Dim fnt As New Font("@MS ゴシック", 16, FontStyle.Bold) 'StringFormatを作成 Dim sf As New StringFormat() '縦書きにする sf.FormatFlags = StringFormatFlags.DirectionVertical '文字を表示 g.DrawString(drawString, fnt, Brushes.Black, 150F, 50F, sf) 'リソースを開放する fnt.Dispose() g.Dispose() [C#] //PictureBox1のGraphicsオブジェクトを取得 Graphics g = PictureBox1.CreateGraphics(); string drawString= "テストです。"; //Fontオブジェクトの作成(太字にする) Font fnt = new Font("@MS ゴシック", 16, FontStyle.Bold); //StringFormatを作成 StringFormat sf = new StringFormat(); //縦書きにする sf.FormatFlags = StringFormatFlags.DirectionVertical; //文字を表示 g.DrawString(drawString, fnt, Brushes.Black, 150.0F, 50.0F, sf); //リソースを開放する fnt.Dispose(); g.Dispose();
グラデーションをかけて描画するつぎはブラシを使って文字にグラデーションをかける例です。またStringFormatを指定することにより、文字を真ん中に表示するようにしています。グラデーションのブラシに関してはこちらを参考にしてください。 [VB.NET] 'Imports System.Drawing 'Imports System.Drawing.Drawing2D 'がソースファイルの一番上に書かれているものとする 'PictureBox1のGraphicsオブジェクトを取得 Dim g As Graphics = PictureBox1.CreateGraphics() Dim drawString As String = "テストです。" 'Fontを作成 Dim fnt As New Font("MS ゴシック", 24) '線形グラデーション(横に黄色から赤)を作成 Dim b As New LinearGradientBrush(PictureBox1.ClientRectangle, _ Color.Yellow, Color.Red, LinearGradientMode.Horizontal) 'StringFormatを作成 Dim sf As New StringFormat '文字を真ん中に表示 sf.Alignment = StringAlignment.Center sf.LineAlignment = StringAlignment.Center '文字を書く g.DrawString(drawString, fnt, b, _ RectangleF.op_Implicit(PictureBox1.ClientRectangle), sf) 'リソースを開放する fnt.Dispose() b.Dispose() g.Dispose() //using System.Drawing; //using System.Drawing.Drawing2D; //がソースファイルの一番上に書かれているものとする //PictureBox1のGraphicsオブジェクトを取得 Graphics g = PictureBox1.CreateGraphics(); string drawString= "テストです。"; //Fontを作成 Font fnt = new Font("MS ゴシック", 24); //線形グラデーション(横に黄色から赤)を作成 LinearGradientBrush b = new LinearGradientBrush( PictureBox1.ClientRectangle, Color.Yellow, Color.Red, LinearGradientMode.Horizontal); //StringFormatを作成 StringFormat sf = new StringFormat(); //文字を真ん中に表示 sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; //文字を書く g.DrawString(drawString, fnt, b, PictureBox1.ClientRectangle, sf); //リソースを開放する fnt.Dispose(); b.Dispose(); g.Dispose();
TextRenderer.DrawTextメソッドを使用する方法.NET Framework 2.0からはTextRendererクラスが追加され、このDrawTextメソッドにより文字列を描画することもできるようになりました。 Graphics.DrawStringメソッドとの違いは、Graphics.DrawStringメソッドがGDI+を使ってテキスト描画しているのに対して、TextRenderer.DrawTextメソッドはGDIを使用している点です。 こちらで紹介しているように、UseCompatibleTextRenderingプロパティがTrueのコントロールはGraphics.DrawStringではなく、TextRenderer.DrawTextで描画されます。なぜこのようなやり方が必要になったかという点に関してMSDN「Application.SetCompatibleTextRenderingDefault メソッド」では、「GDI+ にパフォーマンスとローカライズに関する問題があるから」とされています。 TextRenderer.DrawTextメソッドは、印刷で使用することはできません。また、色の指定にColor型を使用しているため、ブラシを使って描画することはできません。 さらにこちらで指摘しているように、描画する文字列の中にある&はアンダーラインとして描画されます。&のまま描画する方法は、こちらで紹介しています。 以下にTextRenderer.DrawTextメソッドを使って文字列を描画する例を示します。一番初めに紹介したコードをTextRenderer.DrawTextメソッドを使って書き換えました。 [VB.NET] 'PictureBox1のGraphicsオブジェクトを取得 Dim g As Graphics = PictureBox1.CreateGraphics() 'フォントオブジェクトの作成 Dim fnt As New Font("MS UI Gothic", 20) '文字列を位置(0,0)、青色で表示 System.Windows.Forms.TextRenderer.DrawText( _ g, "これはテストです。", fnt, New Point(0, 0), Color.Blue) 'リソースを開放する fnt.Dispose() g.Dispose() [C#] //PictureBox1のGraphicsオブジェクトを取得 Graphics g = PictureBox1.CreateGraphics(); //フォントオブジェクトの作成 Font fnt = new Font("MS UI Gothic", 20); //文字列を位置(0,0)、青色で表示 System.Windows.Forms.TextRenderer.DrawText( g, "これはテストです。", fnt, new Point(0, 0), Color.Blue); //リソースを開放する fnt.Dispose(); g.Dispose(); Graphics.DrawStringと比べてどのように表示されるか比較してみました。下図の上がGraphics.DrawStringで、下がTextRenderer.DrawTextです。
文字列を"wwwwwwwwww"にして描画すると、次のようになります。やはり上がGraphics.DrawStringで、下がTextRenderer.DrawTextです。
|
|
Copyright 2002-2008 DOBON!. All rights reserved.
|