![]() |
JavaTM 2 SDK, v1.3 での
|
ドキュメントの目次 |
Java 2 SDK, v1.3 はアップグレードリリースですが、Java 2DTM API に次の重要な機能が追加されました。
マルチモニターのサポート パレットエントリの妥当性検査 PNG のサポート ColorModel の変換タイプへのアクセス フォントの動的なロード 新しい ICC プロファイルタグ BasicStroke ピクセル調整のヒント 向上した段落の均衡とハイフネーション 式の解決方法 正確なバウンディングボックスの計算方法
- マルチモニターのサポート
ターゲット GraphicsDevice の GraphicsConfiguration を使用して Frame、JFrame、Window、または JWindow オブジェクトを生成することによって、マルチスクリーン上でレンダリングできるようになりました。新規 Frame コンストラクタである Frame(GraphicsConfiguration) を使用すると、別の画面デバイス上に Frame オブジェクトを作成できます。
新しい Window コンストラクタ Window(Window, GraphicsConfiguration) は、画面デバイスの GraphicsConfiguration を使用して、特定のウィンドウを所有者とする不可視のウィンドウを新規に生成します。
新規 GraphicsConfiguration の getBounds メソッドは、GraphicsConfiguration の境界をデバイス座標で返します。仮想デバイスがある場合、getBounds から返されるデバイス座標は仮想デバイス座標になります。
新しい Component の getGraphicsConfiguration メソッドは、その Component が生成された画面デバイスの GraphicsConfiguration を返します。
複数の物理画面デバイスで構成される仮想デバイス構成では、GraphicsConfiguration オブジェクトの座標は、仮想座標系への相対座標になります。このため、Frame または Window の setLocation メソッドを呼び出す場合には、仮想座標を使用する必要があります。同様に、仮想デバイス環境で GraphicsConfiguration の getBounds を呼び出すと、仮想デバイス座標が返されます。
次のコード例は、GraphicsEnvironment 内の各画面デバイス上の GraphicsConfiguration ごとに、JFrame オブジェクトを生成する方法を示します。これは、GraphicsConfiguration の境界に対して JFrame の位置を示す座標のオフセットを設定し、指定された GraphicsConfiguration の画面に JFrame が確実に表示されるようにします。
GraphicsEnvironment ge = GraphicsEnvironment. getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); for (int j = 0; j < gs.length; j++) { GraphicsDevice gd = gs[j]; GraphicsConfiguration[] gc = gd.getConfigurations(); for (int i=0; i < gc.length; i++) { JFrame f = new JFrame(gs[j].getDefaultConfiguration()); Canvas c = new Canvas(gc[i]); Rectangle gcBounds = gc[i].getBounds(); int xoffs = gcBounds.x; int yoffs = gcBounds.y; f.getContentPane().add(c); f.setSize(300, 150); f.setLocation((i*50)+xoffs, (i*60)+yoffs); f.show(); } }この例の中で GraphicsConfiguration の境界が考慮されていない場合、JFrame はメイン画面の (i*50, i*60) の位置に表示されます。これは、指定された GraphicsConfiguration の画面と異なる場合があります。Java 2D API によるマルチスクリーン環境サポートについての詳細は、Java 2D API プログラマーズガイドの 「マルチスクリーン環境でのレンダリング」 を参照してください。
- PNG のサポート
PNG (Portable Network Graphics) 形式は、柔軟性と拡張可能性を備えた、所有されていないファイル形式であり、移植性および可逆性のあるラスタイメージの保存ができます。PNG は、グレースケール、インデックスで指定された色、およびトゥルーカラーイメージをサポートしています。 さらに、オプションでアルファチャネルもサポートしています。
PNG イメージのロードと描画は、Java 2DTM API の GIF および JPEG イメージと同じ方法で行われます。
- フォントの動的なロード
新しい Font.createFont(int, InputStream) メソッドを使用すると、JavaTM 2 Virtual Machine* (JVM) に対して実行時にフォントを追加することができます。このフォントは、JVM の終了時には無効になります。 また、Font の作成者以外は使用できません。現時点ではこのメソッドを使用して実行時に作成できるフォントは、TrueType フォントだけです。次のコード例は、TrueType の Arial フォントを、ファイルから動的にロードする方法を示しています。
File file = new File("Arial.ttf"); FileInputStream fis = new FileInputStream(file); Font font = Font.createFont(Font.TRUETYPE_FONT, fis);同様に、URL からフォントをロードする方法を示します。URL url = new URL("Arial.ttf"); InputStream is = url.openStream(); Font font = Font.createFont(Font.TRUETYPE_FONT, is);- BasicStroke ピクセル調整のヒント
JavaTM 2 SDK, v 1.2 のリリースでは、ユーザの空間座標内で (0.5, 0.5) で描画された任意の線を、BasicStroke オブジェクトが自動的に変換することがありました。この変換動作によって、線はピクセルの中央に配置され、すべてのピクセルを正確に覆います。この覆う動作によって、平滑化が適用されているかどうかにかかわらず、その線は同じに見えます。さらに、変換バイアスによって、画面およびプリンタに対する出力の一貫性が確保されます。残念ながら、変換バイアスによって予期しない結果が発生することがあります。たとえば、座標システムを大きく拡大したときに、塗りつぶされた図形を囲んでいる線が、図形の輪郭の中央に期待どおり正確に配置されないことがあります。
この機能は Java 2 SDK, v 1.2 の Beta リリースに含まれていましたが、FCS リリースでは実装されませんでした。
Java 2 SDK, v1.3 の Beta リリースでは、プログラマが変換バイアスを指定するための 3 つの BasicStroke コンストラクタが新たに追加されました。その後、これらのコンストラクタは、下位互換性の問題から削除されました。
Java 2 SDK, v1.3 の FCS リリースでは、これらのコンストラクタは、ストロークの正規化に使用される RenderingHints クラス内のヒントセットに置き換えられました。
KEY_STROKE_CONTROL ヒントキーおよびそのヒント値
VALUE_STROKE_NORMALIZE
VALUE_STROKE_DEFAULT
VALUE_STROKE_PUREVALUE_STROKE_NORMALIZE ヒントは、正規化が実行されることを示します。正規化により、平滑化が適用されるかどうか、またストロークがピクセルグリッド上でレンダリングされるかどうかにかかわらず、ストローク表示の整合性が高まります。
VALUE_STROKE_PURE ヒントは、正規化が実行されないことを示します。幾何形状をレンダリングする際に、視覚的な整合性よりも正確さを求める場合、このヒントを使用します。
ストロークが正規化されるかどうかを重視しない場合、VALUE_STROKE_DEFAULT を使用します。
整合性を保つためにストロークを正規化する場合、Graphics2D クラスの setRenderingHint(Key, Object) メソッドを、KEY_STROKE_CONTROL ヒントキーおよび VALUE_STROKE_NORMALIZE ヒント値を使って呼び出します。
Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE);この新規 API の詳細、およびこれが Java 2 SDK, v1.3 の Beta リリースに追加された BasicStroke コンストラクタと置き換えられた理由については、「Basic Stroke offset and change of plans」を参照してください。- パレットエントリの妥当性検査
X Windows 上で 8 ビットディスプレイに対してオフスクリーンイメージを作成した場合、返された IndexColorModel オブジェクトに含まれる使用可能な色のパレットに、不正な色エントリが含まれることがあります。不正なエントリは、透明な黒で塗りつぶされています。Java 2 SDK, v1.3 より前には、パレット内で不正なエントリを識別する方法がありませんでした。次の新しい 2 つのメソッドと 1 つのコンストラクタを使用すると、ルックアップテーブルのインデックスが正しいかどうかを判定することができます。
- IndexColorModel(int, int, int[], int, int, BigInteger) - cmap 配列の各ピクセルの妥当性を指定できるコンストラクタ
- isValid(int pixel) - 1 つのピクセルの妥当性を判定する
- getValidPixels - カラーマップ内のピクセルの妥当性を示す BigInteger を返す
- ColorModel の変換タイプへのアクセス
新しい ColorModel の getTransferType メソッドを使用すると、現在の ColorModel の transferType を取得することができます。transferType は、ピクセル値を表すときに使用される配列のデータ型です。transferType は protected フィールドなので、いくつかのパラメータを除いて現在の ColorModel オブジェクトと同じものを生成する場合は、現在の ColorModel の transferType を取得する必要があります。- 新しい ICC プロファイルタグ
ICC_Profile クラスには、3 つの新しいプロファイルタグがあります。 これらのタグを使用して、Java 2D API を、最新の International Color Consortium のプロファイル仕様 ICC.1:1998-09 および付録 ICC.1A:1999-04 に準拠させることができます。
- 向上した段落の均衡とハイフネーション
TextMeasurer クラスを使用すると、LineBreakMeasurer クラスを使用する場合に比べ、行ブレークをより正確に制御できます。TextMeasurer を使用して、テキストの行ブレークする位置を決定したり、段落の均衡化およびハイフネーションを実行できます。- 式の解決方法
係数を含む配列の指定された代数式を解き、結果を異なる配列に格納するための 2 つのメソッドが、Java 2D API に新たに追加されました。JavaTM 2 SDK バージョン 1.2.2 では、これらの式の結果を、係数を含む配列内に返すメソッドだけが存在しました。新規メソッドは結果を別の配列に格納するため、係数がそのまま保存されます。
QuadCurve2D の solveQuadratic(double[], double[]) メソッドは、2 次方程式を解きます。
CubicCurve2D の solveCubic(double[], double[]) メソッドは、3 次方程式を解きます。
- 正確なバウンディングボックスの計算方法
よりぴったりした大きさの図形のバウンディングボックスを計算する、Area クラスの getBounds および getBounds2D メソッドに、新たな実装が追加されました。Java 2 SDK バージョン 1.2.2 では、幾何図形の境界計算時に制御ポイントが考慮されるため、これらのメソッドからは大きめのバウンディングボックスが返されます。新たな getBounds および getBounds2D メソッドは、バウンドの計算に制御ポイントを含めません。
* この Web サイトで使用されている用語「Java Virtual Machine」または「JVM」は、Java プラットフォーム用の仮想マシンを表します。
Copyright © 1995-99 Sun Microsystems, Inc. All Rights Reserved. コメントの送付先: java2d-comments@sun.com |
![]() Java ソフトウェア |