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
を組み合わせて使用するようにしてください。