【Java】アンチエイリアシングの利用

2018年3月11日

本稿ではJavaのGraphics2Dクラスを利用したアンチエイリアシングを実装する方法を紹介します。

アンチエイリアシングを使用すると見え方がじらじらせず、滑らかに見えるようになります。

setRenderlingHintメソッド

アンチエイリアシングを利用するにはsetRenderlingHintメソッドを使用します。

1個目の引数にはRenderlingHintsクラスの定数KEY_ANTIALIASINGやKEY_TEXT_ANTIALIASINGを利用します。

2個目の引数もRenderlingHintsクラスの定数VALUE_ANTIALIAS_ONやVALUE_TEXT_ANTIALIAS_ONを利用します。

無効化したい場合はRenderlingHintsクラスの定数VALUE_ANTIALIAS_OFFやVALUE_TEXT_ANTIALIAS_OFFを利用しましょう。

それぞれ図形や線のアンチエイリアシングの設定、文字描画時のアンチエイリアシングの設定とで別れています。

それでは実際にサンプルを実行して比較してみましょう。

import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test{
	public static void main(String[] args) {
		GameWindow gw = new GameWindow("テストウィンドウ",400,300);
		DrawCanvas dc = new DrawCanvas();
		gw.add(dc);
		gw.setVisible(true);
	}
}
class GameWindow extends JFrame{

	public GameWindow(String title, int width, int height) {
		super(title);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(width,height);
		setLocationRelativeTo(null);
		setResizable(false);
	}
}
class DrawCanvas extends JPanel{
	public void paintComponent(Graphics g) {
		super.paintComponent(g);

		//フォント
		Font f = g.getFont();
		Font f2 = new Font("HGP創英角ポップ体", Font.BOLD, 25);

		//アンチエイリアシングなしで描画
		g.drawOval(50, 150, 50, 50);
		g.drawString("テキスト", 50, 50);
		g.setFont(f2);
		g.drawString("選択", 50, 100);

		g.setFont(f);
		Graphics2D g2 = (Graphics2D)g;

		//図形や線のアンチエイリアシングの有効化
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

		//文字描画のアンチエイリアシングの有効化
		g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

		//アンチエイリアシングありで描画
		g.drawOval(200, 150, 50, 50);
		g.drawString("テキスト", 200, 50);
		g.setFont(f2);
		g.drawString("選択", 200, 100);
	}
}
実行結果

やっぱ滑らかに見えたほうがきれいです。

ただしアンチエイリアシングは処理速度が若干遅くなることも考慮しておきましょう。

私は文字のアンチエイリアシングは基本かけるようにしています。

Java

Posted by nompor