我正在开发一个用于提取 SVG 图像轮廓的库。在 Java 中使用 Batik 使将 SVG 文件转换为扩展形状(java.awt.geom.Shape实例)的过程变得非常有趣——对于相对复杂的形状,我们在毫秒级进行此操作。但是,由于我需要一个组合轮廓,我java.awt.geom.Area使用.add(shape). 出乎意料的是,即使对于相对简单的形状,这也非常慢。“令人难以置信”是指在 36 秒内将 8 个形状加在一起,每个形状 6-10 个点。
运行的代码-Xrunhprof提示,大多数的时间都花在java.awt.geom.AreaOp.pruneEdges(..)与java.lang.StrictMath.acos是最大的罪魁祸首。将替代实现 ( AreaX) 与结合FastMath仅产生微不足道的改进,而我对处理任意几何形状的 Java 库的搜索却是空洞的。
那么问题是,在没有这种疯狂的性能损失的情况下,在 Java 中创建形状联合的方法是什么?是否有一些库或方法可以帮助实现这个看似简单的操作?