2009-05-01 61 views
4

我想將我的JPanel中的圖像導出到矢量圖形文件中,以便可以以高於屏幕的分辨率對其進行編輯和打印。實質上,我希望它的paint()函數可以用目標Graphics來調用,它將繪圖命令保存到矢量圖形文件中。將JPanel導出到矢量圖形

什麼是一個很好的,簡單的方法來做到這一點?推薦哪些圖書館?哪種矢量格式最好,爲什麼?

回答

6

看一看The Java EPS Graphics2D package

許多Java程序使用的Graphics2D繪製在屏幕上的東西,雖然很容易將輸出保存爲PNG或JPEG文件,這是一個有點難以將其導出爲EPS爲包括文檔中或紙張。

該軟件包使整個過程變得非常簡單,因爲您可以使用EpsGraphics2D對象,就好像它是Graphics2D對象一樣。唯一的區別是所有實現的方法都會創建EPS輸出,這意味着您繪製的圖表可以調整大小而不會導致調整基於像素的圖像(如JEPG和PNG文件)時可能看到的任何鋸齒狀邊緣。

+0

這看起來很不錯;謝謝。我不確定EPS是否適合我,但我可以走這條路,如果我這樣做,這看起來像是一個很好的包。 – 2009-05-01 16:01:56

+0

我要去解決這個問題。謝謝。看起來EPS很好用。 – 2009-05-01 21:58:00

5

Apache Batik可讓您繪製Graphics2D對象的專門實現,然後導出爲可縮放矢量圖形(.svg)文件。然後您可以使用支持SVG的瀏覽器查看/處理/打印它(Firefox會自動處理它,ISTR,IE等可以使用插件)。

參見SVGGraphics2D對象(處理記錄here

+0

我忘記了蠟染;謝謝。我之前看到過,我認爲SVG對我來說可能是一個很好的格式。 – 2009-05-01 16:02:37

+0

我用了很長時間,但效果很好 – 2009-05-01 16:07:22

+0

如果我可以選擇兩個答案,我也會選擇這個答案。只是EPS比SVG更適合我的需求。 – 2009-05-01 21:58:45

-1

這基本上是不可能的直接,爲低電平的Java API在柵格(象素)的術語工程和從不存儲在矢量格式。 (檢查java.awt.Graphics的API以查看我的意思)。

有一些轉換光柵矢量格式一些通用的程序,這是一個我上快速搜索發現: http://autotrace.sourceforge.net/index.html

因此,使用這樣的程序,您可以將您的問題分爲兩個小問題:

  1. 將您的JPanel進入該文件的位圖或文件(http://www.jguru.com/faq/view.jsp?EID=242020
  2. 運行自動跟蹤。
+1

您可以這樣做,因爲API將根據drawRectangle()等方式進行交談,具體取決於要繪製到的組件,以不同的方式渲染 – 2009-05-01 16:08:32

+1

當您在專門的Graphics2D實現上調用drawLine()時,它將向量該行代表該文件。 – DJClayworth 2009-05-01 17:25:06

2

皮埃爾提到的Java EPS看起來不錯,但如果不是,你可能還想看看FreeHEP Vector Graphics。書面允許在高能物理領域中重用Java,它包含一個矢量圖形包,通過實施Graphics2D完成。我們已經用它來出口EPS,在很多年裏都取得了很大的成功。

+0

謝謝;我使用FreeHEP矢量圖形結束了,發現它很容易使用並且非常好。方便和有據可查。 – 2009-05-04 13:24:38

1

我可以推薦VectorGraphics2D庫(LGPL)。雖然它不支持Graphics2D的所有功能,但我成功地將它用於我的項目。它爲各種矢量文件格式提供了java.awt.Graphics2D的實現。它只是將所有繪畫操作導出到EPS,SVG或PDF文件。

0

FreeHEP似乎工作得很好,雖然它似乎不再被維護,它的錯誤和論壇頁面已經消失。只需幾行代碼,您就可以看到一個彈出式對話框,可以將任何組件保存爲各種可擴展的常規圖像格式。我們有一些具有挑戰性的圖像,使用alpha通道,旋轉的文本,曲線界定的區域,並且使用VectorGraphics2D可以完美保存,效果更好。

到目前爲止,我見過的唯一問題是JPEG保存,它對我所有的圖像都是黑色的。這對於我們來說並不是非常重要,因爲png的作品,加上所有的矢量模式,但我相信這對某些人來說是個問題。

我必須準確地添加這麼多的代碼保存在所有這些模式:

public static void showImage(Component comp) 
{ 
    try 
    { 
     ExportDialog export = new ExportDialog(); 
     export.showExportDialog(null, "Export view as ...", comp, "export"); 
     System.err.println("Image save complete"); 

    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

有圖書館罐子一束必須添加。