- Home ›
- Java2Dによる画像処理 ›
- Graphics2Dクラス ›
- HERE
アンチエイリアス処理
Graphics2Dクラスでは描画方式についていくつかの設定項目が用意されています。描画の時に品質を優先するかスピードを優先するかなどです。ここでは設定項目の1つであるアンチエイリアス処理の設定について確認していきます。
アンチエイリアス処理とは線や図形を表示する時にギザギザに見えてしまう部分を滑らかな感じにしてくれるものです。
アンチエイリアス処理を有効にするにはGraphics2Dクラスで用意されている「setRenderingHint」メソッドを使います。
setRenderingHint public abstract void setRenderingHint(RenderingHints.Key hintKey, Object hintValue)
描画アルゴリズムの推奨設定の値を 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_CONTRAST | LCD テキストコントラスト |
図形の描画に対してアンチエイリアスの設定を行うには「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); }
上記の設定を行うことでアンチエイリアス処理が有効となります。
サンプルプログラム
簡単なサンプルを一度試してみます。
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 )