Java 2D は、Javaにおいて2次元コンピュータグラフィックスの描画に使われるAPIである。Java 2D の描画操作は、図形を描き、それを塗りつぶし、ディスプレイ上でその結果を合成するものと言える。

構成

編集

Java 2D とその文書は Java SE の一部としてダウンロード可能である。Java 2D API クラスは Java SE の以下のパッケージにある。

基本概念

編集

以下のオブジェクト(インタフェース)は、Java 2D での描画操作に必須の部分である。

Shape

編集

shape は、太さのない境界線で内側と外側を区切ったものである。内側のピクセルは描画操作で変更され、外側は影響を受けない。

単なる直線の場合、内側が存在しないので塗りつぶしても何も変化しない。従って、直線を描きたいときは細長い長方形を使って内側を塗りつぶす。

Paint

編集

paint は、塗りつぶし操作でピクセルに使用するを生成する。最も単純な paint は java.awt.Color であり、全てのピクセルに同じ色を生成する。色の変化を伴う paint や、画像を描画する paint、任意の色の組合せを生成する paint などもある。円形の shape に黄色の塗りつぶしを施せば、黄色の円が描画される。画像を生成する paint を使って円の塗りつぶしを行えば、その画像を円形に切り取った画像が生成される。

Composite

編集

描画操作では、source(paint が生成しようとしているピクセル群)と destination(既に描画されたピクセル群)がある。通常、source は単に destination を上書きするが、composite によってその動作を変更できる。

composite に source と destination を指定すると、画面に最終的に現れる画像が生成される。典型的な composite として java.awt.AlphaComposite があり、描画するピクセルが半透明であるかのように扱うので、destination のピクセルもある程度見える。

塗りつぶし

編集

shape を塗りつぶすとき、各ピクセルが内側なのか外側なのかを判定する必要がある。内側のピクセルは塗りつぶし操作の影響を受ける。境界線上のピクセルは、アンチエイリアスが有効になっていれば、ある程度だけ影響を受けることになる。

paint を使って、各ピクセルに設定すべき色が生成される。単色の塗りつぶしの場合、各ピクセルには同じ色が設定される。

composite が paint によって設定された色と画面上に既にある色とを考慮し、最終的な色を決定する。

その他のオブジェクト

編集

以下のオブジェクトは、上述の単純なオブジェクトによる描画で必要に応じて使われる。

Transform

編集

Java 2D の描画操作は、transformの対象となり、回転させたり、切り取ったり、拡大・縮小したりできる。最も一般的な transform は identity transformであり、何もしない。

transform を使った塗りつぶしは、単に新たな変換された shape を生成し、それを塗りつぶしたように見える。

Stroke

編集

fill(塗りつぶし)操作だけでなく、Java 2D は draw 操作も提供している。fill では shape の内側を描画したが、draw では輪郭線を描画する。輪郭線としては、単純な実線もあれば、各線分の端が丸められた破線もある。

輪郭線を生成するオブジェクトは stroke である。入力として shape を与えられると、stroke はその形の輪郭線を表す shape を新たに生成する。例えば、太さのない線が stroke によって1ピクセル幅の多角形に変換されたりする。

従って、draw 操作は、 stroke を使って新たな shape を作成し、それを塗りつぶすものと言える。

技術的には、stroke は shape を入力として新たな shape を生成するためだけに必要とされる。Java 2D では輪郭線を描くために stroke が実装されているが、stroke を直接使って任意の図形を生成することも可能である。

最適化

編集

概念的には、Java 2D で黒い直線を描くのは、直線の shape を生成し、現在の transform に従って変換し、stroke によって細長い四角形の shape を生成し、その shape に対してピクセル位置を問合せ、java.awt.Color.BLACK を使ってピクセルを生成し、composite に従ってそれを画面上に表示するという一連の動作からなる。

しかし、このようなステップを毎回実行するのは効率的でない。Java 2D では、これらのステップを省略できるような最適化を施している。塗りつぶしが単純な単色だった場合、個々のピクセルの色を問い合わせる必要はない。同様に、完全に不透明な重ね合わせの設定なら、composite 操作は不要であり、無駄である。

Java 2D は省略可能な手順は可能な限り省略して、上述の全ステップを実施したのと同じ見た目を生成する。これにより、柔軟性と高速性を両立させている。

出力先

編集

以上の説明は、話を単純にするため、出力先がディスプレイであると仮定していた。しかし、実際の出力先はプリンタでも、メモリでもよいし、Java 2D のコマンドを受け取って解釈しベクターイメージファイルを生成するオブジェクトでもよい。

Java2D と OpenGL の関係

編集

Java SE 6 の build 51 以降、Java 2D と OpenGL の連携が可能となった。例えば、ボタンのアイコンとして3次元グラフィックスのアニメーションを使うこともできる。

関連項目

編集

外部リンク

編集

📚 Artikel Terkait di Wikipedia

Java

Java ウィキブックスにJava関連の解説書・教科書があります。 ウィキメディア・コモンズには、Javaに関連するカテゴリがあります。 Javaの文法 Javaのキーワード (予約語) Javaの性能 Javaに対する批判 C♯とJavaの比較 Java仮想マシン Javaコンパイラ Java Community

JavaScript

JavaScript(ジャバスクリプト)は、プログラミング言語であり、HyperText Markup Language(HTML)やCascading Style Sheets(CSS)と並ぶ World Wide Web(WWW)の中核技術の一つである。Java

Java Platform, Standard Edition

Java Platform, Standard Edition または Java SE は、多くのJavaプラットフォームプログラムで利用されるJava APIの集合体である。Java仮想マシン、APIなどから構成される。バージョン1.2からバージョン5.0まではJava 2 Platform, Standard

Java仮想マシン

Java仮想マシン(ジャバかそうマシン、英語: Java virtual machine、Java VM、JVM)は、Javaバイトコードとして定義された命令セットを実行するスタック型の仮想マシン。APIやいくつかのツールとセットでJava実行環境(JRE)としてリリースされている。この環境を移植す

Java Platform, Micro Edition

Java Platform, Micro Edition (Java ME) は携帯電話、PDA、テレビのようなリソースが制限されたデバイスにおけるJavaの小型セット。JSR 68 で規定されている。当初は、Java 2 Platform, Micro Edition (J2ME) という名称だった。Java

Java Community Process

Java コミュニティ・プロセス(英: Java community process)またはJCPは、1998年に設立され、利害関係者が Java プラットフォームの将来のバージョンや機能に関与する定義に関与することを許した標準化の手続きである。 JCP は Java の仕様に関する要望をまとめる Java

Apache FOP

は次の形式でXSL-FO文書を出力することができる。 PDF (FOPでは最も良好な出力が得られる) プリンタへの直接出力 コンピュータの画面への直接出力 (Java2D/AWT) PostScript PCL (Printer Command Language) AFP (Advanced Function Presentation)

Portable Document Format

32000-1 についての特許を無償で利用できるようにしたが、XFA(英語版) (Adobe XML Forms Architecture) や Adobe JavaScript などはアドビのプロプライエタリな部分として残っている。 PDFファイルは 印刷可能なあらゆる文書から生成でき、表示や印刷は各社が無料