2011年9月8日木曜日

描画方法(RenderingHintsクラス)

ここではレンダリング方式の設定について少し見ておきます。Graphics2DのメソッドにsetRenderingHintというメソッドがあります。このメソッドで描画方式を設定できます。例えばアンチエイリアス処理をしたり、描画をスピード優先で行うか品質優先で行うかなどです。

メソッドは下記のように定義されています。

setRenderingHint

public abstract void setRenderingHint(RenderingHints.Key hintKey,
Object hintValue)

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

パラメータ:
hintKey - 設定されるヒントのキー
hintValue - 指定されたヒントカテゴリの推奨設定を示す値
パラメータで指定するhintKeyの各項目に対してhintValueの値を設定します。ここで、hintKeyで設定できる項目は決められていて、それぞれに対する項目に対して設定可能なhintValue値も決められています。

RenderingHintsクラスのクラス図は下記のようになっています。

java.lang.Object
java.awt.RenderingHints
public class RenderingHints
設定可能な項目と、設定可能な値のペアは下記のようになっています。

static RenderingHints.Key static Object
KEY_ALPHA_INTERPOLATION
Alpha interpolation hint key. VALUE_ALPHA_INTERPOLATION_DEFAULT
VALUE_ALPHA_INTERPOLATION_QUALITY
VALUE_ALPHA_INTERPOLATION_SPEED
KEY_ANTIALIASING
Antialiasing hint key. VALUE_ANTIALIAS_DEFAULT
VALUE_ANTIALIAS_OFF
VALUE_ANTIALIAS_ON
KEY_COLOR_RENDERING
Color rendering hint key. VALUE_COLOR_RENDER_DEFAULT
VALUE_COLOR_RENDER_QUALITY
VALUE_COLOR_RENDER_SPEED
KEY_DITHERING
Dithering hint key. VALUE_DITHER_DEFAULT
VALUE_DITHER_DISABLE
VALUE_DITHER_ENABLE
KEY_FRACTIONALMETRICS
Font fractional metrics hint key. VALUE_FRACTIONALMETRICS_DEFAULT
VALUE_FRACTIONALMETRICS_OFF
VALUE_FRACTIONALMETRICS_ON
KEY_INTERPOLATION
Interpolation hint key. VALUE_INTERPOLATION_BICUBIC
VALUE_INTERPOLATION_BILINEAR
VALUE_INTERPOLATION_NEAREST_NEIGHBOR
KEY_RENDERING
Rendering hint key. VALUE_RENDER_DEFAULT
VALUE_RENDER_QUALITY
VALUE_RENDER_SPEED
KEY_STROKE_CONTROL
Stroke normalization control hint key. VALUE_STROKE_DEFAULT
VALUE_STROKE_NORMALIZE
VALUE_STROKE_PURE
KEY_TEXT_ANTIALIASING
Text antialiasing hint key. VALUE_TEXT_ANTIALIAS_DEFAULT
VALUE_TEXT_ANTIALIAS_OFF
VALUE_TEXT_ANTIALIAS_ON
など、色々な設定項目があります。ただ、今のところはっきりと使い方が分かっているのはKEY_ANTIALIASINGだけなので、取り合えずこれを試してみましょう。他も分かり次第追加していきます。

KEY_ANTIALIASINGについて
KEY_ANTIALIASINGはアンチエイリアス処理をするかどうかを指定します。「アンチエイリアス」とは、文字の輪郭をなめらかに綺麗に表示させることをいいます。具体的には斜めの線などはギザギザに見えてしまうのですが、アンチエイリアス処理をすることで滑らかな感じにしてくれます。

デフォルトでONになっているケースもあるかもしれませんが、私の環境ではデフォルトではOFFになっているようですので、ONにした場合とOFFにした場合で試してみましょう。

使い方としては下記のようになります。

public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
ではサンプルプログラムを試してみましょう。

import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;

public class Java2dTest extends JFrame{

public static void main(String[] args){
Java2dTest test = new Java2dTest();

test.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){System.exit(0);}
});

test.setBounds( 0, 0, 400, 200);
test.setVisible(true);
}

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

BasicStroke wideStroke = new BasicStroke(4.0f);
BasicStroke superwideStroke = new BasicStroke(8.0f);

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

g2.setStroke(wideStroke);
g2.draw(new Line2D.Double(20, 50, 180, 120));

g2.setStroke(superwideStroke);
g2.draw(new Line2D.Double(20, 80, 180, 150));

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

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

g2.setStroke(wideStroke);
g2.draw(new Line2D.Double(220, 50, 380, 120));

g2.setStroke(superwideStroke);
g2.draw(new Line2D.Double(220, 80, 380, 150));

g2.draw(new Arc2D.Double(270, 60, 100, 100, 90, 135, Arc2D.CHORD));

}
}

0 件のコメント:

コメントを投稿