【.NET】文字を縁取りして描画する
VB.NETやC#で文字をふちどりして描画する方法です。System.Drawing.Drawing2D.GraphicsPathオブジェクトで、文字のパスを作成して描画する方法が簡単です。
下記のサンプルはFormのPaintイベントでフォーム自体に描画しています。
サンプルでは、ある程度小さい文字でも綺麗に見えるように、アンチエイリアスをかけています。
'VB.NETのサンプル Private Sub Form1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) _ Handles Mybase.Paint 'アンチエリアス Dim initialMode As System.Drawing.Drawing2D.SmoothingMode _ = e.Graphics.SmoothingMode e.Graphics.SmoothingMode = _ System.Drawing.Drawing2D.SmoothingMode.HighQuality 'レンダリング品質 Dim initialQuality As System.Drawing.Drawing2D.CompositingQuality _ = e.Graphics.CompositingQuality e.Graphics.CompositingQuality = _ System.Drawing.Drawing2D.CompositingQuality.HighQuality Dim str As String = "ふちどりして描画したいテキスト" Dim gp As New System.Drawing.Drawing2D.GraphicsPath() gp.AddString(str, New FontFamily("MS Gothic"), _ CInt(FontStyle.Regular), 30F, _ New Point(3, 3), StringFormat.GenericDefault) 'パスの線分を描画 Dim drawPen As New Pen(Color.Blue, 3F) e.Graphics.DrawPath(drawPen, gp) '塗る Dim fillBrush As Brush = New SolidBrush(Color.White) e.Graphics.FillPath(fillBrush, gp) drawPen.Dispose() fillBrush.Dispose() '念のため元に戻しておきます e.Graphics.SmoothingMode = initialMode e.Graphics.CompositingQuality = initialQuality End Sub
//C#のサンプル private void Form1_Paint(object sender, PaintEventArgs e) { //アンチエリアス System.Drawing.Drawing2D.SmoothingMode initialMode = e.Graphics.SmoothingMode; e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //レンダリング品質 System.Drawing.Drawing2D.CompositingQuality initialQuality = e.Graphics.CompositingQuality; e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; string str = "ふちどりして描画したいテキスト"; System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath(); gp.AddString(str, new FontFamily("MS Gothic"), (int)FontStyle.Regular, 30.0F, new Point(3, 3), StringFormat.GenericDefault); //パスの線分を描画 Pen drawPen = new Pen(Color.Blue, 3.0F); e.Graphics.DrawPath(drawPen, gp); //塗る Brush fillBrush = new SolidBrush(Color.White); e.Graphics.FillPath(fillBrush, gp); drawPen.Dispose(); fillBrush.Dispose(); //念のため元に戻しておきます e.Graphics.SmoothingMode = initialMode; e.Graphics.CompositingQuality = initialQuality; }
もし、これ以上の何かをやりたい場合は、フォントのアウトラインを取得して、自分で処理することになると思います。
あるいはcairo等のライブラリを使用すると、求めていることが実現できるかもしれません。
(cairoを使った例を掲載しています。【.NET】VB/C#でグラフィックライブラリcairoを使う)
参考URL
MSDNライブラリ GlyphTypeface.GetGlyphOutline メソッド .Net Framework 3.5以上
MSDNライブラリ GetGlyphOutline(Win32 API)
マイクロソフト サポート オンライン TrueType グリフのアウトラインを作成する方法
http://www.pinvoke.net/default.aspx/gdi32/GetGlyphOutline.html
関連図書
関連記事
TrackBack URL :
Comments (0)