アンチエイリアス処理

広告

Graphics2Dクラスでは描画方式についていくつかの設定項目が用意されています。描画の時に品質を優先するかスピードを優先するかなどです。ここでは設定項目の1つであるアンチエイリアス処理の設定について確認していきます。

アンチエイリアス処理とは線や図形を表示する時にギザギザに見えてしまう部分を滑らかな感じにしてくれるものです。

アンチエイリアス処理を有効にするにはGraphics2Dクラスで用意されている「setRenderingHint」メソッドを使います。

描画アルゴリズムの推奨設定の値を 1 つ設定します。Hint カテゴリには、描
画品質を制御することと、描画プロセスでの描画速度と描画品質との全体的な
妥協点を制御することが含まれます。RenderingHints クラスで、共通のキーと
値の定義の一部を参照できます。

パラメータ:
  hintKey - 設定されるヒントのキー
  hintValue - 指定されたヒントカテゴリの推奨設定を 示す値

「setRenderingHint」メソッドでは設定対象となる項目と設定内容をペアで指定します。設定可能な項目はjava.awt.RenderingHintsクラスで定義されており次の値の中から指定します。

設定項目
static RenderingHints.Key KEY_ALPHA_INTERPOLATIONアルファ補間
static RenderingHints.Key KEY_ANTIALIASINGアンチエイリアス
static RenderingHints.Key KEY_COLOR_RENDERINGカラー描画
static RenderingHints.Key KEY_DITHERINGディザリング
static RenderingHints.Key KEY_FRACTIONALMETRICSフォント部分メトリックス
static RenderingHints.Key KEY_INTERPOLATION補間
static RenderingHints.Key KEY_RENDERING描画
static RenderingHints.Key KEY_STROKE_CONTROLストローク正規化コントロール
static RenderingHints.Key KEY_TEXT_ANTIALIASINGテキストアンチエイリアス
static RenderingHints.Key KEY_TEXT_LCD_CONTRASTLCD テキストコントラスト

図形の描画に対してアンチエイリアスの設定を行うには「RenderingHints.Key.KEY_ANTIALIASING」に対して値を設定します。設定可能な値は次の通りです。

設定項目
RenderingHints.VALUE_ANTIALIAS_ONアンチエイリアスを有効にします
RenderingHints.VALUE_ANTIALIAS_OFFアンチエイリアスを無効にします
RenderingHints.VALUE_ANTIALIAS_DEFAULTデフォルトの設定を使用します

具体的には次のように記述します。

public void paintComponent(Graphics g){
  Graphics2D g2 = (Graphics2D)g;

  g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                      RenderingHints.VALUE_ANTIALIAS_ON);
}

上記の設定を行うことでアンチエイリアス処理が有効となります。

サンプルプログラム

簡単なサンプルを一度試してみます。

Graphics2DTest3.java

import javax.swing.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.*;
import java.awt.RenderingHints;

public class Graphics2DTest3 extends JPanel{

  public static void main(String[] args){
    JFrame frame = new JFrame();

    Graphics2DTest3 app = new Graphics2DTest3();
    frame.getContentPane().add(app);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  public void paintComponent(Graphics g){
    Graphics2D g2 = (Graphics2D)g;

    g2.draw(new Line2D.Double(20, 20, 110, 140));
    g2.draw(new Arc2D.Double(70, 60, 100, 100, 90, 135, Arc2D.CHORD));

    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                        RenderingHints.VALUE_ANTIALIAS_ON);

    g2.draw(new Line2D.Double(150, 20, 240, 140));
    g2.draw(new Arc2D.Double(200, 60, 100, 100, 90, 135, Arc2D.CHORD));
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

アンチエイリアス処理

左側はデフォルトの設定のまま描画しています。右側はアンチエイリアス処理を有効にした後で同じ図形を位置をずらして描画しています。アンチエイリアス処理が有効になっている場合は画像が滑らかに描画されていることが確認できます。

( Written by Tatsuo Ikura )