paint()
函数,并使用一个目标Graphics将绘图命令保存到矢量图形文件中。有什么好的简单方法可以做到这一点?推荐使用哪些库?哪种矢量格式最好,为什么?
paint()
函数,并使用一个目标Graphics将绘图命令保存到矢量图形文件中。Apache Batik允许您将绘图到Graphics2D对象的专用实现,然后导出为可缩放矢量图形(.svg)文件。您可以使用支持SVG的浏览器(如Firefox)查看/处理/打印它(IE和其他浏览器可以使用插件)。
请参阅SVGGraphics2D对象(此处有详细说明)
皮埃尔提到的Java EPS看起来很不错,但如果不是您也可以考虑查看FreeHEP矢量图形。它被编写用于高能物理领域中Java的重用,包括一个矢量图形包,通过Graphics2D的实现完成。我们已经成功地使用它导出EPS多年。
有相同需求的人可以使用以下附加库:
这两个库都是GPLv3协议的,并且经过了广泛的测试,被应用于JFreeChart和Orson Charts中。
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();
}
}
还需要添加一堆库文件。
这基本上是不可能直接实现的,因为低级Java API是以光栅(像素)形式工作的,从未以矢量格式存储。 (查看java.awt.Graphics的API即可了解我的意思)。
有一些通用程序可以将光栅转换为矢量格式,这是我在快速搜索中找到的一个: http://autotrace.sourceforge.net/index.html
因此,使用这样的程序,您可以将问题分解为两个较小的问题: