アンチエイリアスを有効にしてDrawStringメソッドでテキストを描画する - C#
アンチエイリアスを有効にしてDrawStringメソッドでテキストを描画するコードを紹介します。
概要
こちらの記事ではGraphicsオブジェクトを利用して円や線の描画でアンチエイリアスで描画するコードを紹介しました。
同様のコードでDrawStringメソッドでテキストを描画しても描画された文字列はアンチエイリアスが有効にはなりません。
この記事では、DrawStringメソッドで描画する文字列にアンチエイリアスを適用するコードを紹介します。
DrawStringメソッドで描画する文字列にアンチエイリアスを有効にするには、GraphicsオブジェクトのTextRenderingHintプロパティに
TextRenderingHint.AntiAlias
などアンチエイリアスが有効なるモードの値を設定します。
書式
[Graphicsオブジェクト].TextRenderingHint = [TextRenderingHint列挙型の値]
[TextRenderingHint列挙型の値は以下の値があります。
値 | int値 | 意味 |
SystemDefault | 0 | システムの既定の設定で文字列を描画します。 |
AntiAlias | 4 | アンチエイリアスを有効にし、ヒンティングなしで文字列を描画します。 |
AntiAliasGridFit | 3 | アンチエイリアスを有効にし、ヒンティングありで文字列を描画します。 |
ClearTypeGridFit | 5 | ClearTypeを有効にし、ヒンティングありで文字列を描画します。 |
SingleBitPerPixel | 2 | アンチエイリアス、ClearTypeを無効にし、ヒンティングなしで文字列を描画します。 |
SingleBitPerPixelGridFit | 1 | アンチエイリアス、ClearTypeを無効にし、ヒンティングありで文字列を描画します。 |
記述例
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
プログラム例
UI
下図のフォームを作成します。フォームにPanelコントロールを配置します。
コード
以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DrawStringDemo
{
public partial class FormDrawStringAntiAlias : Form
{
public FormDrawStringAntiAlias()
{
InitializeComponent();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
string text = "ぺんぎんクッキー";
Font f = new Font("MS Gothic", 18);
SolidBrush b = new SolidBrush(Color.Black);
e.Graphics.DrawString(text,f,b,32,16);
}
}
}
解説
以下のコードで、GraphicsオブジェクトのTextRenderingHintプロパティを設定しています。
TextRenderingHint.AntiAlias
を設定し、
アンチエイリアスを有効にした文字列を描画する設定にします。
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
画面に文字列を描画します。文字列描画については
こちらの記事を参照してください。
string text = "ぺんぎんクッキー";
Font f = new Font("MS Gothic", 18);
SolidBrush b = new SolidBrush(Color.Black);
e.Graphics.DrawString(text,f,b,32,16);
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。画面に文字列が描画されます。
文字を確認するとアンチエイリアスが有効になっています。
プログラム例:デフォルトの描画結果
TextRenderingHintプロパティを設定しない場合のデフォルトの描画結果も確認します。
コード
以下のコードを記述します。先のプログラムの PaintイベントのTextRenderingHintプロパティの設定コードを削除した状態です。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DrawStringDemo
{
public partial class FormDrawStringAntiAlias : Form
{
public FormDrawStringAntiAlias()
{
InitializeComponent();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
string text = "ぺんぎんクッキー";
Font f = new Font("MS Gothic", 18);
SolidBrush b = new SolidBrush(Color.Black);
e.Graphics.DrawString(text,f,b,32,16);
}
}
}
実行結果
プロジェクトを実行します。下図の画面が表示されます。
TextRenderingHint.AntiAlias
の状態と描画結果が異なりますが、
描画された文字列にアンチエイリアスが適用されてるようにも見えます。
モードの違いによる描画結果
モードの違いで描画結果がどのように変化するか確認します。
何も指定しない場合 (TextRenderingHint.SystemDefault)
SystemDefaultの設定は、実行しているOSにより変化する可能性があります。今回はWindows 11での結果となります。
何も指定しない場合はClearTypeが有効な状態で描画されました。
TextRenderingHint.AntiAlias
TextRenderingHint.AntiAliasを指定した場合は、アンチエイリアスが有効な状態で描画されています。
黒またはグレーで文字色が描画されており、色の変化が無いため、ClearTypeは利用されていない状態です。
TextRenderingHint.AntiAliasGridFit
TextRenderingHint.AntiAliasを指定した場合はアンチエイリアスが有効な状態で描画されます。
このフォントの場合では、TextRenderingHint.AntiAliasとの違いはありませんでした。
TextRenderingHint.ClearTypeGridFit
TextRenderingHint.ClearTypeGridFitを指定した場合は、ClearTypeが有効な状態で描画されます。
この実行環境の場合は、TextRenderingHint.SystemDefaultと同じ描画結果になりました。
TextRenderingHint.SingleBitPerPixel
TextRenderingHint.SingleBitPerPixelを設定した場合はアンチエイリアス、ClearTypeどちらも無効な状態で描画されます。
TextRenderingHint.SingleBitPerPixelGridFit
TextRenderingHint.SingleBitPerPixelGridFitを設定した場合はアンチエイリアス、ClearTypeどちらも無効な状態で描画されます。
SingleBitPerPixel との違いが微妙にあります。(「ぺ」の文字の半濁音の丸の部分がわかりやすいです。)
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用