Graphics2D が持っている java.awt.RenderingHints の初期設定内容について調べてみる。


import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.util.Iterator;
import java.util.Set;
 
public class RenderingHintsTest{
 
 public static void main(String[] args){
  printCurrentRenderingHints();
  printRenderingHintList();
 }
 
 // Graphics2D での RenderingHints の初期設定値を調べる
 private static void printCurrentRenderingHints(){
 
  BufferedImage image =
   new BufferedImage(100,100,BufferedImage.TYPE_INT_ARGB);
 
  Graphics2D g = image.createGraphics();
 
  System.out.println("----- CurrentRenderingHints begin -----");
   RenderingHints rh = g.getRenderingHints();
   Set rhset = rh.keySet();
   for(Iterator rhi = rhset.iterator(); rhi.hasNext();){
    RenderingHints.Key rhk = (RenderingHints.Key)rhi.next();
    Object       rhv = rh.get(rhk);
    System.out.println(rhk + "=" + rhv);
   }
  System.out.println("----- CurrentRenderingHints end -----");
  System.out.println("");
 }
 
 // RenderingHints のヒントキーとヒント値の文字列表現を調べる
 private static void printRenderingHintList(){
 
  System.out.println("----- RenderingHintList begin -----");
  System.out.println("");
 
  System.out.println("KEY_ALPHA_INTERPOLATION="
     + RenderingHints.KEY_ALPHA_INTERPOLATION);
  System.out.println("VALUE_ALPHA_INTERPOLATION_DEFAULT="
     + RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT);
  System.out.println("VALUE_ALPHA_INTERPOLATION_QUALITY="
     + RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
  System.out.println("VALUE_ALPHA_INTERPOLATION_SPEED="
     + RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED);
  System.out.println("");
 
  System.out.println("KEY_ANTIALIASING="
     + RenderingHints.KEY_ANTIALIASING);
  System.out.println("VALUE_ANTIALIAS_DEFAULT="
     + RenderingHints.VALUE_ANTIALIAS_DEFAULT);
  System.out.println("VALUE_ANTIALIAS_OFF="
     + RenderingHints.VALUE_ANTIALIAS_OFF);
  System.out.println("VALUE_ANTIALIAS_ON="
     + RenderingHints.VALUE_ANTIALIAS_ON);
  System.out.println("");
 
  System.out.println("KEY_COLOR_RENDERING="
     + RenderingHints.KEY_COLOR_RENDERING);
  System.out.println("VALUE_COLOR_RENDER_DEFAULT="
     + RenderingHints.VALUE_COLOR_RENDER_DEFAULT);
  System.out.println("VALUE_COLOR_RENDER_QUALITY="
     + RenderingHints.VALUE_COLOR_RENDER_QUALITY);
  System.out.println("VALUE_COLOR_RENDER_SPEED="
     + RenderingHints.VALUE_COLOR_RENDER_SPEED);
  System.out.println("");
 
  System.out.println("KEY_DITHERING="
     + RenderingHints.KEY_DITHERING);
  System.out.println("VALUE_DITHER_DEFAULT="
     + RenderingHints.VALUE_DITHER_DEFAULT);
  System.out.println("VALUE_DITHER_DISABLE="
     + RenderingHints.VALUE_DITHER_DISABLE);
  System.out.println("VALUE_DITHER_ENABLE="
     + RenderingHints.VALUE_DITHER_ENABLE);
  System.out.println("");
 
  System.out.println("KEY_FRACTIONALMETRICS="
     + RenderingHints.KEY_FRACTIONALMETRICS);
  System.out.println("VALUE_FRACTIONALMETRICS_DEFAULT="
     + RenderingHints.VALUE_FRACTIONALMETRICS_DEFAULT);
  System.out.println("VALUE_FRACTIONALMETRICS_OFF="
     + RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
  System.out.println("VALUE_FRACTIONALMETRICS_ON="
     + RenderingHints.VALUE_FRACTIONALMETRICS_ON);
  System.out.println("");
 
  System.out.println("KEY_INTERPOLATION="
     + RenderingHints.KEY_INTERPOLATION);
  System.out.println("VALUE_INTERPOLATION_BICUBIC="
     + RenderingHints.VALUE_INTERPOLATION_BICUBIC);
  System.out.println("VALUE_INTERPOLATION_BILINEAR="
     + RenderingHints.VALUE_INTERPOLATION_BILINEAR);
  System.out.println("VALUE_INTERPOLATION_NEAREST_NEIGHBOR="
     + RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
  System.out.println("");
 
  System.out.println("KEY_RENDERING="
     + RenderingHints.KEY_RENDERING);
  System.out.println("VALUE_RENDER_DEFAULT="
     + RenderingHints.VALUE_RENDER_DEFAULT);
  System.out.println("VALUE_RENDER_QUALITY="
     + RenderingHints.VALUE_RENDER_QUALITY);
  System.out.println("VALUE_RENDER_SPEED="
     + RenderingHints.VALUE_RENDER_SPEED);
  System.out.println("");
 
  System.out.println("KEY_STROKE_CONTROL="
     + RenderingHints.KEY_STROKE_CONTROL);
  System.out.println("VALUE_STROKE_DEFAULT="
     + RenderingHints.VALUE_STROKE_DEFAULT);
  System.out.println("VALUE_STROKE_NORMALIZE="
     + RenderingHints.VALUE_STROKE_NORMALIZE);
  System.out.println("VALUE_STROKE_PURE="
     + RenderingHints.VALUE_STROKE_PURE);
  System.out.println("");
 
  System.out.println("KEY_TEXT_ANTIALIASING="
     + RenderingHints.KEY_TEXT_ANTIALIASING);
  System.out.println("VALUE_TEXT_ANTIALIAS_DEFAULT="
     + RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
  System.out.println("VALUE_TEXT_ANTIALIAS_OFF="
     + RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
  System.out.println("VALUE_TEXT_ANTIALIAS_ON="
     + RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
  System.out.println("");
 
  System.out.println("----- RenderingHintList end -----");
 }
}

次の3つの環境で上記のコードを実行して調査。

  • Windows 2000 Service Pack 4 JDK1.4.2_07
  • Windows 2000 Service Pack 4 JDK 1.5.0_02
  • GNU/Linux 3.1 jdk1.4.2_07

以下、上記コードを実行した際の出力結果。3つとも同様の結果になった。

----- CurrentRenderingHints begin -----
Fractional metrics enable key=Integer text metrics mode
Global antialiasing enable key=Nonantialiased rendering mode
Global rendering quality key=Default rendering methods
Stroke normalization control key=Default stroke normalization
Text-specific antialiasing enable key=Default antialiasing text mode
----- CurrentRenderingHints end -----

----- RenderingHintList begin -----

KEY_ALPHA_INTERPOLATION=Alpha blending interpolation method key
VALUE_ALPHA_INTERPOLATION_DEFAULT=Default alpha blending methods
VALUE_ALPHA_INTERPOLATION_QUALITY=Highest quality alpha blending methods
VALUE_ALPHA_INTERPOLATION_SPEED=Fastest alpha blending methods

KEY_ANTIALIASING=Global antialiasing enable key
VALUE_ANTIALIAS_DEFAULT=Default antialiasing rendering mode
VALUE_ANTIALIAS_OFF=Nonantialiased rendering mode
VALUE_ANTIALIAS_ON=Antialiased rendering mode

KEY_COLOR_RENDERING=Color rendering quality key
VALUE_COLOR_RENDER_DEFAULT=Default color rendering mode
VALUE_COLOR_RENDER_QUALITY=Highest quality color rendering mode
VALUE_COLOR_RENDER_SPEED=Fastest color rendering mode

KEY_DITHERING=Dithering quality key
VALUE_DITHER_DEFAULT=Default dithering mode
VALUE_DITHER_DISABLE=Nondithered rendering mode
VALUE_DITHER_ENABLE=Dithered rendering mode

KEY_FRACTIONALMETRICS=Fractional metrics enable key
VALUE_FRACTIONALMETRICS_DEFAULT=Default fractional text metrics mode
VALUE_FRACTIONALMETRICS_OFF=Integer text metrics mode
VALUE_FRACTIONALMETRICS_ON=Fractional text metrics mode

KEY_INTERPOLATION=Image interpolation method key
VALUE_INTERPOLATION_BICUBIC=Bicubic image interpolation mode
VALUE_INTERPOLATION_BILINEAR=Bilinear image interpolation mode
VALUE_INTERPOLATION_NEAREST_NEIGHBOR=Nearest Neighbor image interpolation mode

KEY_RENDERING=Global rendering quality key
VALUE_RENDER_DEFAULT=Default rendering methods
VALUE_RENDER_QUALITY=Highest quality rendering methods
VALUE_RENDER_SPEED=Fastest rendering methods

KEY_STROKE_CONTROL=Stroke normalization control key
VALUE_STROKE_DEFAULT=Default stroke normalization
VALUE_STROKE_NORMALIZE=Normalize strokes for consistent rendering
VALUE_STROKE_PURE=Pure stroke conversion for accurate paths

KEY_TEXT_ANTIALIASING=Text-specific antialiasing enable key
VALUE_TEXT_ANTIALIAS_DEFAULT=Default antialiasing text mode
VALUE_TEXT_ANTIALIAS_OFF=Nonantialiased text mode
VALUE_TEXT_ANTIALIAS_ON=Antialiased text mode

----- RenderingHintList end -----

出力結果から、初期設定値をフィールド名にて置き換えたものは以下の通り。

KEY_FRACTIONALMETRICS = VALUE_FRACTIONALMETRICS_OFF
KEY_ANTIALIASING = VALUE_ANTIALIAS_OFF
KEY_RENDERING = VALUE_RENDER_DEFAULT
KEY_STROKE_CONTROL = VALUE_STROKE_DEFAULT
KEY_TEXT_ANTIALIASING = VALUE_TEXT_ANTIALIAS_DEFAULT

教訓: 横に長いソースコードはHTMLに貼るべきでない。インデントが空白1文字だとけっこうツライ。

tags: zlashdot Java Java

Posted by NI-Lab. (@nilab)