アンチエイリアスを有効にして線や円をキャンバスに描画する - C#

C#でアンチエイリアスを有効にして線や円をキャンバスに描画するコードを紹介します。

概要

C#ではデフォルトの状態ではGraphicsオブジェクトのDrawLineメソッドやDrawEllipseメソッドを呼び出して、線や円を描画した場合、 アンチエイリアスの無い線が描画されます。
この記事では、アンチエイリアスを有効にして、線や円を描画するコードを紹介します。

描画時にアンチエイリアスを有効にする場合は描画するGraphicsオブジェクトのSmoothingModeプロパティにSmoothingMode.AntiAliasを設定します。
補足
DrawStringメソッドで描画する文字列をアンチエイリアスで描画する場合はこちらの記事を参照して下さい。

書式

[Graphicsオブジェクト].SmoothingMode = SmoothingMode.AntiAlias;

プログラム例

UI

下図のフォームを作成します。フォームにPanelコントロールを1つ配置します。

コード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AntiAliasDemo
{
  public partial class FormAntiAliasDraw : Form
  {
    public FormAntiAliasDraw()
    {
      InitializeComponent();
    }

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
      e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

      Pen p1 = new Pen(Color.FromArgb(0x2f,0x95,0x10), 2);
      e.Graphics.DrawLine(p1, 24, 12, 256, 96);

      Pen p2 = new Pen(Color.FromArgb(0x22,0x88,0xd7), 4);
      e.Graphics.DrawEllipse(p2, 220, 120, 64, 64);
    }
  }
}

解説

GraphicsオブジェクトのSmoothingMode プロパティにSmoothingMode.AntiAliasを設定します。
  e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

DrawLineメソッドで線を描画します。
  Pen p1 = new Pen(Color.FromArgb(0x2f,0x95,0x10), 2);
  e.Graphics.DrawLine(p1, 24, 12, 256, 96);

DrawEllipseメソッドで円を描画します。
  Pen p2 = new Pen(Color.FromArgb(0x22,0x88,0xd7), 4);
  e.Graphics.DrawEllipse(p2, 220, 120, 64, 64);

実行結果

プロジェクトを実行します。下図の画面が表示されます。円や斜めの直線がアンチエイリアスされて描画できています。

プログラム例:デフォルトの描画の場合

比較用にデフォルトの描画結果も確認します。

UI

下図のフォームを作成します。先のプログラムから変更はないです。

コード

以下のコードを記述します。
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 AntiAliasDemo
{
  public partial class FormAntiAliasDraw : Form
  {
    public FormAntiAliasDraw()
    {
      InitializeComponent();
    }

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
      Pen p1 = new Pen(Color.FromArgb(0x2f,0x95,0x10), 2);
      e.Graphics.DrawLine(p1, 24, 12, 256, 96);

      Pen p2 = new Pen(Color.FromArgb(0x22,0x88,0xd7), 4);
      e.Graphics.DrawEllipse(p2, 220, 120, 64, 64);
    }
  }
}

解説

SmoothingMode プロパティに SmoothingMode.AntiAlias を設定する以下のコードを削除しデフォルトの状態で画面に図形を描画します。
      e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

実行結果

プロジェクトを実行します。下図の画面が表示されます。アンチエイリアスされていない描画結果が確認できます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2010-07-07
iPentec all rights reserverd.