WisdomSoft - for your serial experiences.

2.13 アンチエイリアス

アンチエイリアスを有効化し、図形の端をぼかすことで、斜めの線のドット感(カクつき)を押さえることができます。

2.13.1 描画オブジェクトの描画品質

コンピュータグラフィックスは小さな点(ドット)の集合であるということから、斜めの線や曲線を描画するとギザギザになるという問題があります。例えば、白い背景に黒い線を斜めに描画すると、このギザギザを見ることができます。このギザギザのことをジャギとも呼びます。

図1 斜めの線のジャギ
図1 斜めの線のジャギ

特に解像度が低いとジャギが目立ってしまい、多くの場合人間の目には美しくないものと感じられます。そこで、このジャギを目立たなくするように、階段状のギザギザになっているドットの間に薄い色を混ぜることで滑らかに見せることができます。これをアンチエイリアスと呼びます。

図2 アンチエイリアスが施された線(拡大)
図2 アンチエイリアスが施された線(拡大)

当然、アンチエイリアス化された線は高品質なグラフィックスを実現できますが、その一方でアンチエイリアスを行わない場合に比べて、計算量が増えるため描画速度は低速になります。

Graphics オブジェクトでは、Draw や Fill 系メソッドで図形を描画するときに、アンチエイリアスを適用して高品質な図を出力するのか、アンチエイリアスを行わずに高速な処理を行うのかを選択することができます。この設定は SmoothingMode プロパティで行うことができます。

Graphics クラス SmootingMode プロパティ
public SmoothingMode SmoothingMode {get; set;}

SmootingMode プロパティには、System.Drawing.Drawing2D.SmoothingMode 列挙体のメンバのいずれかを設定します。

System.Drawing.Drawing2D.SmoothingMode 列挙体
[Serializable]
public enum SmoothingMode

この列挙体には、アンチエイリアス処理を表す AntiAlias、アンチエイリアスを行わない None、高品質なレンダリングモードを表す HightQuality、低品質で高速なレンダリングモードを表す HighSpeed、など、図形の描画処理の品質に関する情報を提供するメンバが定義されています。

コード1
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

public class Test : Form
{
	protected override void OnPaint(PaintEventArgs e) 
	{
		base.OnPaint(e);
		this.BackColor = Color.White;
		Pen pen = new Pen(Color.Black, 40);

		e.Graphics.SmoothingMode = SmoothingMode.None;
		e.Graphics.DrawLine(pen, 10, 10, 200, 150);
		e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
		e.Graphics.DrawLine(pen, 210, 10, 400, 150);
	}
	static void Main() 
	{
		Application.Run(new Test());
	}
}
実行結果
コード1 実行結果

コード1は、アンチエイリアスを行わない斜線と、アンチエイリアスを行う斜線を描画するプログラムです。実行結果を見ると、左側の線の輪郭がギザギザしているのに対し、右側の線は滑らかな輪郭であることが分かります。

ただし、SmoothingMode プロパティでの設定はテキストの描画には反映されません。テキストの描画、及びテキストの描画品質に関しては「第3章 フォントとテキスト」で解説します。