代码之家  ›  专栏  ›  技术社区  ›  Carl Manaster

将jpanel导出到矢量图形

  •  4
  • Carl Manaster  · 技术社区  · 16 年前

    我想将jpanel中的图像导出到一个矢量图形文件中,这样它就可以以高于屏幕分辨率的方式进行编辑和打印。基本上我想要它 paint() 函数,用目标图形调用,目标图形将图形命令保存到矢量图形文件中。

    什么是一个好的,简单的方法来做到这一点?建议使用哪些库?哪种矢量格式最好,为什么?

    7 回复  |  直到 9 年前
        1
  •  6
  •   Michael Myers KitsuneYMG    16 年前

    看一看 The Java EPS Graphics2D package .

    许多Java程序使用GraceS2D来在屏幕上绘制素材,虽然很容易将输出保存为PNG或JPEG文件,但是将其作为EPS包含在文档或纸中输出有点困难。

    这个包使整个过程非常简单,因为您可以像使用graphics2d对象一样使用epsgraphics2d对象。唯一的区别是,所有实现的方法都会创建EPS输出,这意味着在调整基于像素的图像(如jepg和png文件)的大小时,可以调整绘制的图表的大小,而不会导致任何锯齿状边缘。

        2
  •  5
  •   Brian Agnew    16 年前

    阿帕奇 Batik 将允许您绘制一个graphics2d对象的专门实现,然后导出为一个可伸缩的矢量图形(.svg)文件。然后,您可以使用支持SVG的浏览器查看/处理/打印它(火狐会自然地处理它,ISR,IE和其他人可以使用插件)。

    SVGGraphics2D 对象(过程记录 here )

        3
  •  2
  •   DJClayworth    16 年前

    彼埃尔提到的JavaEPS看起来不错,但如果不是,你也可以看看。 FreeHEP Vector Graphics .为了在高能物理领域中进行Java重用,它包含了一个矢量图形包,它是通过GraceS2D的实现来完成的。

        4
  •  1
  •   Andrew    14 年前

    我可以推荐 VectorGraphics2D 图书馆(LGPL)。虽然它不支持graphics2d的所有功能,但我在我的项目中成功地使用了它。它为各种矢量文件格式提供java.awt.graphics2d的实现。它只是将所有绘制操作导出到eps、svg或pdf文件。

        5
  •  1
  •   David Gilbert    9 年前

    针对具有相同要求的人员的附加库:

    这些GPLv3和经过广泛使用测试的 JFreeChart Orson Charts .

        6
  •  0
  •   William Nelson    11 年前

    freehp似乎工作得很好,尽管它似乎不再被维护,它的bug和论坛页面也消失了。只需几行,就可以弹出一个对话框,将任何组件保存为各种可伸缩的常规图像格式。我们有一些具有挑战性的图像,使用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();
        }
    }
    

    还有一堆图书馆的罐子也必须添加。

        7
  •  -1
  •   Omry Yadan    16 年前

    这基本上是不可能的,因为低级别Java API以光栅(像素)的形式工作,并且从来没有以矢量格式存储。 (检查java.awt.graphics的API以了解我的意思)。

    有一些通用程序可以将光栅转换为矢量格式,这是我在快速搜索中找到的: http://autotrace.sourceforge.net/index.html

    因此,使用这样的程序,您可以将问题分为两个较小的问题:

    1. 将jpanel转换为位图或文件( http://www.jguru.com/faq/view.jsp?EID=242020 )
    2. 对文件运行自动跟踪。