1. Java實現的2D圖形映像開發包
1.1 Java 2D
官方首頁:http://java.sun.com/products/java-media/2D/index.jsp
The Java 2D API is a set of classes for advanced 2D graphics and imaging, encompassing line art, text, and images in a single comprehensive model. The API provides extensive support for image compositing and alpha channel images, a set of classes to provide accurate color space definition and conversion, and a rich set of display-oriented imaging operators.
從JDK 1.5開始,Java 2D API被整合到JSE中,不單獨發行Java 2D API。Java 2D提供了實現非常複雜圖形的機制,這些機制同Java平台的GUI體繫結構很好地整合在一起。
Java 2D為開發人員提供了下列功能:
(1)對渲染品質的控制:沒有 Java 2D,繪製圖形時就無法進行消除鋸齒,而解析度也變得最小,只有一個像素。
(2)裁剪、合成和透明度:不僅可使用任意外形來限定繪製操作的邊界,而且提供對圖形進行分層以及控制透明度和不透明度的能力。
(3)繪製和填充簡單及複雜的外形:這種功能提供了一個Stroke代理和一個Paint代理,前者定義用來繪製外形輪廓的筆,後者答應用純色、漸層色和圖案來填充外形。
(4)影像處理和變換:Java 2D 同 Java 進階映像 API(Java Advanced Imaging API (JAI))協作,支援用大量圖形格式處理複雜的映像。Java 2D 還提供了修改映像、外形和字型字元的變換能力。
(5)進階字型處理和字串格式化:可以像操作任何其它圖形外形一樣操作字型字元。除此以外,可以象文文書處理程式一樣,通過為 String 中的字元應用屬性和樣式資訊來建立格式化文本。
1.1.1 Java2D的透明度和合成規則
合成規則(compositing rule)決定了繪製重疊對象的結果。通過選擇合成規則,可以獲得諸如不同的透明度之類的各種視覺效果。要建立合成規則,就需要用到a通道(a-channel)的概念。a通道可以視作眼色屬性的一部分,用它來描述透明度。
詳細內容參見《電腦圖形學:應用Java 2D和3D》孫正興譯,機械工業出版,2008(4)
1.1.2 Graphic Layers Framework(Java 2D圖層處理架構)
網址:http://java.sun.com/developer/Books/2dgraphics/chapter6.html
The Graphic Layers Framework, GLF, provides a foundation for easy creation of rendering effects, such as Recessed Shadow or Shape Texturizing. 提供以下功能:
(1)Layers as reusable rendering components.
(2)Configuration framework and utilities. The framework provides utilities and tools to deal with the large number of configuration parameters and to enable experimentation with different settings.
(3)API extensions. The framework provides several extensions to the Java 2D API: different Paint and Stroke implementations, but also BufferedImage filters and Composite implementations.
1.2 JAI
項目首頁:https://jai.dev.java.net/
The Java Advanced Imaging API (JAI) provides a set of object-oriented interfaces that supports a simple, high-level programming model which allows images to be manipulated easily in Java applications and applets. JAI goes beyond the functionality of traditional imaging APIs to provide a high-performance, latform-independent, extensible image processing framework.
1.3 Image I/O Tools
項目首頁:https://jai-imageio.dev.java.net/
JAI Image I/O Tools provides reader, writer, and stream plug-ins for the Java Image I/O Framework and Image I/O-based read and write operations for Java Advanced Imaging. Reader-writer plug-ins are supplied for the BMP, JPEG, JPEG 2000, PNG, PNM, Raw, TIFF, and WBMP image formats.
1.4 開源影像處理開發包ImageJ
官方首頁:http://rsb.info.nih.gov/ij/
ImageJ是一個基於java開發的跨平台影像處理與分析工具,具有很強的擴充性,已有300多個外掛程式可用。ImageJ內建編輯器,並且匯入了java的編譯器,實現了簡單的IDE功能,使用者可直接基於ImageJ進行影像處理。
ImageJ也可以做為一個影像處理工具包,用於開發applets、servlets或其它影像處理應用程式。ImageJ是當前最快的純Java影像處理程式,它過濾2048x2048的映像只需0.1 秒。ImageJ可運行於Windows,Linux和Sharp Zaurus PDA等多種系統平台。ImageJ支援TIFF、PNG、 GIF、JPEG、BMP、DICOM、FITS等多種映像格式;支援映像棧功能,即在一個視窗裡以多線程的形式層疊多個映像,平行處理,只要記憶體允許,ImageJ能開啟任意多的映像進行處理。除了基本的映像操作,如縮放、旋轉、扭曲、平滑處理外,ImageJ還能進行圖片的地區和像素統計,間距和角度計算,能建立柱狀圖和剖面圖,進行傅裡葉變換。
1.5 Eclipse GEF
官方首頁:http://www.eclipse.org/gef/
GEF(Graphical Editing Framework)用於協助開發人員建立基於Eclipse的繪圖編輯器。GEF由兩個外掛程式組成,其中org.eclipse.draw2d提供了一個Layout和用於顯示展示圖形的表現工作箱。開發人員可以利用或擴充GEF提供的一些公用操作和基礎模組來開發各種領域的繪圖應用軟體。比如UML活動圖表/類圖編輯器,GUI設計器,狀態機器(State Machine),甚至是所見即所得 (WYSIWYG)(WYSIWYG)文字編輯器。
在GEF中,畫板是由多個Layer(層)組成的,層也可以看作是對圖形進行的一種分類管理,它使圖形更加明確,層次清晰。
GEF的圖形是可能分布在多個層上面的,比如連線是放在Connection Layer(串連層)上的,而普通的圖形(比如Shapes Example裡面的長方形和橢圓)是放置在Primary Layer(主層)上的。不同類型的圖形放置在不同的層上,既易於管理又結構清晰。層其實也是一個圖形,和其他圖形一樣都繼承自Figure類,所以我們也可以象添加普通圖形一樣添加層,只不過方式有點不同而已。
在GEF中,每一個EditPart Viewer都有一個特殊的EditPart,叫做Root,而層的建立就在其中。因此要添加自訂的層,首先的任務就是擴充Root EditPart,一般來說,我們使用的是ScalableFreeformRootEditPart。
1.6 開源JGraph
官方首頁:http://www.jgraph.com/jgraph.html
JGraph純Java開發的圖形組件,支援拖放、縮放、合并等操作,可以被結合到任何的Swing應用程式當中。
1.7 開源Batik
官方首頁:http://xmlgraphics.apache.org/batik/
Batik是一個基於Java技術的SVG(可擴充向量圖)工具包。applications或applets使用這個工具包可以查看、產生、處理SVG格式的圖片。