Java 2Dは、Java プログラミング言語を使用して2 次元グラフィックスを描画するためのAPIです。[ 1 ] すべての Java 2D 描画操作は、最終的にはペイントを使用して形状を塗りつぶし、その結果を画面に合成することとして扱うことができます。Java 2D は、高度な 2D グラフィックスとイメージングのためのクラスのセットです。線画、テキスト、および画像を単一の包括的なモデルに包含します。この API は、イメージ合成とアルファ チャンネル イメージの広範なサポート、正確な色空間の定義と変換を提供するクラスのセット、およびディスプレイ指向のイメージング オペレーターの豊富なセットを提供します。
Java 2D APIとそのドキュメントは、JDK 6の一部としてダウンロードできます。Java 2D APIクラスは、JDK 6では以下のパッケージにまとめられています。
java.awtJava Abstract Window Toolkitのメインパッケージ。java.awt.geomJava標準ライブラリには、線、楕円、四角形などの2次元幾何学的形状が含まれています。java.awt.fontJavaでグリフを操作するためのライブラリ。java.awt.color図書館は、色を表現するさまざまな方法を扱っています。java.awt.imageグラフィック画像を操作するためのライブラリ。java.awt.print紙に文章を書くためのツール集。これらのオブジェクトは、すべてのJava 2D描画操作に不可欠な要素です。
Java 2Dにおけるシェイプは、内側と外側を定義する境界です。 シェイプの内側のピクセルは描画操作の影響を受けますが、外側のピクセルは影響を受けません。
直線部分を塗りつぶそうとしても、そのような形状自体にはピクセルが含まれていないため、ピクセルは影響を受けません。代わりに、形状にピクセルが含まれるように、細い長方形を使用する必要があります。
ペイントは、塗りつぶし操作の各ピクセルに使用する色を生成します。最も単純なペイントはjava.awt.Color、すべてのピクセルに同じ色を生成するものです。より複雑なペイントでは、グラデーション、画像、または任意の色の組み合わせを生成できます。円形を黄色で塗りつぶすと、黄色の塗りつぶし円になりますが、画像を生成するペイントを使用して同じ円形を塗りつぶすと、画像の円形の切り抜きが生成されます。
描画操作においては、ソース(ペイントによって生成されるピクセル)とデスティネーション(既に画面上に表示されているピクセル)が存在します。通常、ソースピクセルはデスティネーションピクセルを単純に上書きしますが、コンポジット機能を用いることでこの動作を変更できます。
ソースピクセルとデスティネーションピクセルが与えられた場合、合成によって最終的な結果が生成され、それが最終的に画面に表示されます。最も一般的な合成は でありjava.awt.AlphaComposite、描画されるピクセルを部分的に透明として扱うことができるため、デスティネーションピクセルがある程度透けて見えます。
図形を塗りつぶすには、まず図形の内側にあるピクセルを特定する必要があります。これらのピクセルは塗りつぶし操作の影響を受けます。アンチエイリアシングが有効になっている場合、図形の内側と外側にまたがるピクセルは、影響が小さくなる可能性があります。
次に、ペイント処理では、描画対象となる各ピクセルの色を生成するように指示されます。一般的な単色塗りつぶしの場合、各ピクセルは同じ色に設定されます。
合成処理では、ペイントによって生成されたピクセルと、既に画面上に表示されているピクセルを組み合わせて最終結果を生成します。
これらの物体は、上述のより単純な物体と同様に、それぞれの役割を果たしていると考えることができる。
Java 2D のすべての操作は変換の対象となるため、図形は描画時に平行移動、回転、せん断、拡大縮小を行うことができます。最も一般的に使用される変換は恒等変換であり、これは何も行いません。
変形を使った塗りつぶしは、単純に新しい変形された図形を作成し、その図形を塗りつぶすことと考えることができます。
Java 2D は、塗りつぶし操作に加えて、描画操作も提供します。塗りつぶしは図形の内部を描画しますが、描画は図形の輪郭を描画します。輪郭は、細い線のような単純なものから、各破線の角が丸みを帯びた複雑な破線まで、様々な形状にすることができます。
輪郭線を生成する役割を担うオブジェクトはストロークです。入力された形状に基づいて、ストロークはその輪郭線を表す新しい形状を生成します。例えば、内部構造のない無限に細い線分をストローク処理することで、幅1ピクセルの長方形を作成できます。
したがって、描画操作とは、新しい線画オブジェクトを作成し、そのオブジェクトを塗りつぶすこととして説明できる。
技術的に言えば、ストロークに必要なのは入力された形状を受け取り、新しい形状を生成することだけです。Java 2D に付属のストローク実装は、上述のアウトライン規則を実装していますが、独自に作成したストロークであれば、任意の形状を生成できます。
概念的には、Java 2D でまっすぐな黒い線を描画することは、線分を作成し、現在の変換に従ってそれを変換し、それをストロークして細い長方形を作成し、この形状を照会して影響を受けるピクセルを計算し、を使用してピクセルを生成しjava.awt.Color.BLACK、最後に結果を画面に合成することと考えることができます。
しかし、描画操作ごとにこの一連の手順をすべて実行すると、非常に非効率的になります。そのため、Java 2D は一般的な描画操作を最適化し、これらの手順の多くを省略できるようにしています。たとえば、塗料が単色の場合、実際に塗装する色のリストを生成するように指示する必要はありません。同様に、デフォルトの完全に不透明な合成画像を使用している場合、合成操作を実行するように指示するのは不要であり、無駄な労力となります。
Java 2Dは、各操作においてこれらの手順すべてを実行しているかのように見せるために必要な最小限の処理のみを実行するため、優れた柔軟性と高いパフォーマンスの両方を維持できます。
この記事で提供するテキスト形式の例では、簡潔にするために画面を出力先デバイスとして想定しています。しかし、出力先はプリンタ、メモリイメージ、あるいはJava 2Dグラフィックスコマンドを受け取り、それをベクターグラフィック画像ファイルに変換するオブジェクトなど、何でも構いません。
Java SE 6以降、Java2DとOpenGLは相互運用可能になり、例えばボタン上にアイコンの代わりにアニメーション付き3Dグラフィックスを描画できるようになりました(JOGLを参照)。
.https://docs.oracle.com/javase/8/docs/technotes/guides/2d/