Font
クラスの次の定数が、論理フォントの正規ファミリ名を表すために導入されました。
DIALOG
DIALOG_INPUT
SANS_SERIF
SERIF
MONOSPACED
FontRenderContext
オブジェクトを作成し、アプリケーション経由でテキストを測定するには、FontMetrics
クラスに追加された getFontRenderContext()
メソッドを使用します。GraphicsEnvironment
クラスの新しい registerFont(Font font)
メソッドが導入されましたが、これを使えば、Font.createFont(int, java.io.InputStream)
メソッドを使って作成されたフォント、または Font.deriveFont(int, float)
メソッドを使って作成済みフォントから派生されたフォントを登録できます。登録が成功すると、registerFont
メソッドから true
が返されます。このメソッドから false value
が返された場合、それは、登録しようとしているフォントが、作成済みのフォントでないか、あるいはこの GraphicsEnvironment
オブジェクトにすでに登録されている非登録フォントと競合していることを意味します。FontRenderContext
オブジェクトを作成できるように、java.awt.font.FontRenderContext
クラスの新しいコンストラクタが導入されました。Java SE 6.0 の新機能を反映するために、次のメソッドが追加されました。
isTransformed()
- FontRenderContext
オブジェクトが変換されたレンダリングコンテキストでテキストを測定することを示す。getTransformType()
- アフィン変換の整数タイプを取得する。getAntiAliasingHint()
- FontRenderContext
オブジェクトに適用可能なテキストアンチエイリアス処理レンダリングモードヒントを取得する。getFractionalMetricsHint()
- FontRenderContext
オブジェクトに適用可能なテキスト部分メトリックスレンダリングモードヒントを取得する。getPixelBounds()
- TextLayout
オブジェクトのピクセル境界を取得する。このメソッドは、影響のあるピクセル境界を定義する Rectangle
オブジェクトを返します。Graphics
オブジェクトにテキストレンダリングヒントを適用する機能が用意されています。LCD ディスプレイに最適化された新しいテキストアンチエイリアス処理メソッドが追加されました。これらは一部のシステム上でデフォルトで有効化され、RenderingHints
クラス内で定義された対応するキーと値を使って制御できます。TextLayout
クラスの getOutline(AffineTransform)
メソッドとともに、GraphicAttribute
クラスの新しい getOutline
メソッドを使えば、GraphicAttribute
オブジェクトがレンダリングする領域を表す Shape
オブジェクトを取得できます。ShapeGraphicAttribute
クラスの getOutline
メソッドは、ShapeGraphicAttribute
オブジェクトがレンダリングする領域の輪郭が取得されるように、GraphicsAttribute
クラスの対応するメソッドをオーバーライドします。LayoutPath
クラスは、ベースラインを基準にした Point2D
位置とユーザー空間内のポイントとのマッピングを提供します。このクラスの 2 つのメソッドは、双方向のマッピングを可能にします。つまり、ある位置からユーザー座標内のあるポイントへと、逆にユーザー座標内のあるポイントからある位置へです。TextLayout
オブジェクトのレイアウトパスを取得するために、getLayoutPath()
メソッドが TextLayout
クラスに追加されました。TextAttribute
クラスに新しい属性が導入されました。KERNING
属性を使えば、カーニング整数値を要求して文字の外観をより美しくできます。KERNING_ON
定数は、テキストレンダリング時にフォントによって指定されたカーニングペアに従ってグリフ間の間隔が調整されることを要求します。LIGATURES
属性の定数値 LIGATURES_ON
を使用すると、フォントによって指定されたオプションの合字を適用するように要求されます。TRACKING
属性は、グリフ間の間隔の粗密を制御するために使用されます。たとえば、TRACKING_LOOSE
定数を使用すると、各グリフ間に追加のスペースが割り当てられ、配分されます。BufferStrategy
クラスの新しいメソッドjava.awt.image.BufferStrategy
クラスに dispose()
メソッドが追加されました。この新しいメソッドは、BufferStrategy
オブジェクトによって消費されたシステムリソースを解放します。さらに、このメソッドは、関連付けられた Component
インスタンスからこの BufferStrategy
オブジェクトを削除します。AlphaComposite
クラスに次のメソッドが追加され、指定された合成規則または alpha
値を使用する AlphaComposite
オブジェクトを取得できるようになりました。
public AlphaComposite derive(int rule)
public AlphaComposite derive(float alpha)
この 2 つのメソッドを使えば、開発者はさまざまな合成効果のコーディングを行い、getInstance
メソッドのより複雑な使用を避けることができます。
Composite alpha0 = null, alpha1 = null; alpha0 = AlphaComposite.SrcOver.derive(alpha); alpha1 = AlphaComposite.SrcOver.derive(1-alpha)
MultipleGradientPaint
クラスを継承した LinearGradientPaint
クラスと RadialGradientPaint
クラスは、特定のカラーグラデーションパターンを使って Shape
オブジェクトを塗りつぶします。 MultipleGradientPaint.CycleMethod
列挙は、無効化 (CycleMethod.NO_CYCLE
)、反射 (CycleMethod.REFLECT
)、または繰り返し (CycleMethod.REPEAT
) ペイントを使ってグラデーション境界の外側のペイントを処理するために使用されます。Point2D start = new Point2D.Float(0, 0); Point2D end = new Point2D.Float(100, 100); float[] dist = {0.0f, 0.2f, 1.0f}; Color[] colors = {Color.BLACK, Color.WHITE, Color.GRAY}; LinearGradientPaint p = new LinearGradientPaint(start, end, dist, colors, CycleMethod.REFLECT);
AffineTransform
クラスで次のメソッドが導入されました。public static AffineTransform getRotateInstance(double vecx, double vecy)
public static AffineTransform getRotateInstance(double vecx, double vecy, double anchorx, double anchory)
public static AffineTransform getQuadrantRotateInstance(int numquadrants)
public static AffineTransform getQuadrantRotateInstance(int numquadrants, double anchorx, double anchory)
public void rotate(double vecx, double vecy)
public void rotate(double vecx, double vecy, double anchorx, double anchory)
public void quadrantRotate(int numquadrants)
public void quadrantRotate(int numquadrants, double anchorx, double anchory)
public void setToRotation(double vecx, double vecy)
public void setToRotation(double vecx, double vecy, double anchorx, double anchory
setToQuadrantRotation(int numquadrants)
メソッドを使えば、指定された数の四分円だけ回転できます。その片方は、指定されたアンカーポイントを中心にして指定された数の四分円だけ座標を回転させる変換を返します。AffineTransform
クラスの新しいメソッドは逆変換機能を改善します。Java SE 1.2 で createInverse
メソッドが導入され、これによって形状の座標を元の位置に変換していましたが、新しい invert()
メソッドを使えば、現在の変換をそれ自体の逆状態に設定できます。GeneralPath
クラス用の倍精度GeneralPath
クラスの倍精度版が含まれていませんでした。Path2D
クラスは PathIterator
インタフェースで反復可能なパスを表しており、次の 2 つのサブクラスを持っています。Path2D.Float
および Path2D.Double
。変更後の階層では、GeneralPath
クラスは Path2D.Float
クラスのサブクラスになりました。これらがいずれも単精度で使用できるのに対し、Path2D.Double
クラスは倍精度に適用できます。GeneralPath
クラスではなく Path2D.Float
クラスを使用する理由の 1 つは、アプリケーションで単精度型と倍精度型の両方が採用されている場合の、コードの一貫性と明示性を高めることです。hashCode()
メソッドと equals()
メソッドRectangle2D
クラスには hashCode()
メソッドと equals()
メソッドが含まれていましたが、RectangularShape
クラスのほかのサブクラスにはその同じ機能が含まれていませんでした。JDK 6.0 ではこのギャップを埋めるために、Arc2D
、Ellipse2D
、および RoundRectangle2D
クラスに hashCode()
と equals()
メソッドが追加されています。PrinterJob
クラスでの拡張機能PageFormat
オブジェクトへの変換をより簡単に行うための簡易メソッドとして、getPageFormat
メソッドが JDK 6.0 に追加されました。3 次および 2 次のベジェ曲線の描画用として、適応的前進差分が適用されるパイプラインが別個に開発されました。このアプローチを使うと、ベジェ曲線の描画品質と描画速度が顕著に改善されます。
スキャン変換アルゴリズムの現在の実装のため、Microsoft Sans Serif フォントのグリフが破損しているように見えていました。6282527 バグの修正の一部として、スマートドロップアウトメカニズムが追加されています。
あたかもコードが配列の末尾より後の領域にアクセスしたかのように Java ヒープ内でメモリーが破壊された結果として、VM のクラッシュが発生していました。この修正は、イメージの最初の部分が取得された時点でイメージ表現コードの寸法をチェックします。寸法が一致しない場合には、内部バッファー内のイメージが作成し直されます。
ColorConvertOp
インスタンスに指定されたソースとデスティネーションの ColorSpace
が同じである場合にピクセル値が異なるColorConvertOp
インスタンスに指定されたソースとデスティネーションの ColorSpace
オブジェクトが同じであった場合に、色変換されたデスティネーションと元のソースとの間でピクセル値が異なっていました。このバグを修正するために、sRGB プロファイルが更新され、高速トラックが作成されています (色変換は一切行われない)。
Truetype ヒントは、ピクセルグリッドに関するグリフの方向が固定されるという前提で設計されました。それが、回転、変形、拡大縮小などの複雑なアフィン変換が truetype ヒントでサポートされなかった理由です。その修正として、次のアプローチが実装されています。
PrintService
オブジェクトの設定時に名前を指定しないと JVM がクラッシュするPrintService
オブジェクトの設定時に名前を指定しなかった場合 (getName()
メソッドが null
を返す場合)、JVM がクラッシュしていました。この問題の原因は、次のような特定ユーザーの実装でした。PrintService
インタフェースの getName()
関数から null が返され、この null 値がネイティブ関数 setNativePrintService
に渡されていました。
IndexColorModel
イメージの印刷が失敗することがあるWindows プラットフォームで、ビットマスク透明度を含むイメージの印刷が正しく行われないことがありました。ビットマスク透明度を使用している場合に問題が存在していました。印刷コードは、ビットマスク透明度を、元のイメージのより小さな複数のサブイメージとして処理していました。この修正には、もっとも単純でリスクの少ない解決方法が含まれています。それは、常にイメージのコピーを作成することです。
Type1
ヒントのサポートが欠けているJDK 6 より前に Java のフォントラスタライザがサポートしていたヒントは、Truetype フォントに対するヒントだけでした。しかし、Solaris および Linux プラットフォームでは Type1 フォントが一般的に使用されており、ヒントを使用しない Type1 フォントは通常、あまり自然には見えませんでした。type1 のヒントをサポートするために実装された機能は、次のとおりです。
Truetype のヒントは、任意の変換のサポートを想定せずに設計されました。この制限を克服するため、重要な変換が要求された場合には、「安全」な単位行列を使ってヒントを適用したあと、ヒント適用後の輪郭を変換します。この問題は、4654540 の修正の一部として解決されました。
イメージ変換用のコードは、イメージ処理ライブラリを使って処理を実行していました。このアプローチでは、変換処理を行うたびに少なくとも 1 つの中間バッファーを作成する必要がありました。新しいコードでは、任意の内部処理形式の変換と任意の内部処理形式への合成を、1 つの処理内で、スタックで割り当てられた最小の 1 行ピクセルバッファーのみを使って行えます。
Windows Vista では、DirectDraw
によるハードウェア高速化は現時点ではデフォルトで無効になっていますが、これは、Vista のデスクトップウィンドウマネージャーとの互換性に問題があるからです。
-Dsun.java2d.noddraw=false
プロパティーを使えば、DirectDraw
パイプラインの使用を再度有効にできます。ただし、レンダリングアーティファクトやパフォーマンスの問題のため、それはお勧めできません。Direct3D
パイプラインも有効にするには、前述のフラグと -Dsun.java2d.d3d=true
を組み合わせて使用するようにしてください。