文字描画に対するアンチエイリアス処理

広告

Graphics2Dクラスで用意されている「setRenderingHint」メソッドを使うことで図形の描画に対するアンチエイリアス処理の設定が行えることは前のページで確認しました。

図形の描画の場合は「RenderingHints.Key.KEY_ANTIALIASING」に対して値を設定しましたが文字列の描画に対するアンチエイリアス処理は「RenderingHints.Key.KEY_TEXT_ANTIALIASING」に対して値を設定します。設定可能な値は次の通りです。

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

またJ2SE6.0から次の設定項目も選択できるようになりました。

設定項目
RenderingHints.VALUE_TEXT_ANTIALIAS_GASPフォントの情報を参照してアンチエイリアスを設定します
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGBLCD ディスプレイに適したアンチエイリアス処理を有効にします
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HBGRLCD ディスプレイに適したアンチエイリアス処理を有効にします
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VRGBLCD ディスプレイに適したアンチエイリアス処理を有効にします
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VBGRLCD ディスプレイに適したアンチエイリアス処理を有効にします

LCDディスプレイとは液晶ディスプレイのことです。LCD用の設定はアンチエイリアス用の描画を横方向にするのか縦方向にするのか、またアンチエイリアスの処理によって描画される部分にどの色を使うのかによって使い分けます(具体的には後のサンプルで確認して下さい)。

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

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

  g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
                      RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
}

上記の設定を行うことで文字列の描画に対するアンチエイリアス処理が有効となります。

サンプルプログラム

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

Graphics2DTest4.java

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

public class Graphics2DTest4 extends JPanel{

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

    Graphics2DTest4 app = new Graphics2DTest4();
    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;

    Font font = new Font("Arial", Font.PLAIN, 24);
    g2.setFont(font);

    g2.drawString("AntiAlias", 10, 30);

    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
                        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    g2.drawString("AntiAlias", 140, 30);

    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
                        RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);

    g2.drawString("AntiAlias", 140, 60);

    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
                        RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HBGR);

    g2.drawString("AntiAlias", 140, 90);

    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
                        RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VRGB);

    g2.drawString("AntiAlias", 140, 120);

    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
                        RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VBGR);

    g2.drawString("AntiAlias", 140, 150);
  }
}

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

文字列描画に対するアンチエイリアス処理

左側はデフォルトの設定のまま描画しています。右側はアンチエイリアス処理を有効にした後で文字列を描画しています。今回は5つの設定値を試しました。

違いが分かりにくいですが「VALUE_TEXT_ANTIALIAS_ON」を設定した場合は次にようになります。(Aの部分だけ拡大しています)。

文字列描画に対するアンチエイリアス処理

また「VALUE_TEXT_ANTIALIAS_LCD_HRGB」を設定した場合は次にようになります。

文字列描画に対するアンチエイリアス処理

設定値によってアンチエイリアスの処理の仕方が異なっている事が確認できます。

( Written by Tatsuo Ikura )