- Home ›
- Java2Dによる画像処理 ›
- Graphics2Dクラス ›
- HERE
文字描画に対するアンチエイリアス処理
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_HRGB | LCD ディスプレイに適したアンチエイリアス処理を有効にします | 
| RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HBGR | LCD ディスプレイに適したアンチエイリアス処理を有効にします | 
| RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VRGB | LCD ディスプレイに適したアンチエイリアス処理を有効にします | 
| RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VBGR | LCD ディスプレイに適したアンチエイリアス処理を有効にします | 
LCDディスプレイとは液晶ディスプレイのことです。LCD用の設定はアンチエイリアス用の描画を横方向にするのか縦方向にするのか、またアンチエイリアスの処理によって描画される部分にどの色を使うのかによって使い分けます(具体的には後のサンプルで確認して下さい)。
具体的には次のように記述します。
public void paintComponent(Graphics g){
  Graphics2D g2 = (Graphics2D)g;
  g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
                      RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
}
			上記の設定を行うことで文字列の描画に対するアンチエイリアス処理が有効となります。
サンプルプログラム
簡単なサンプルを一度試してみます。
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 )

 
				 JavaDrive
JavaDrive