如何使用 Path2D(或任何形状抽屉)在 Java 中绘制 SVG 路径点?

How to draw SVG path points in Java using Path2D (or any Shape drawer)?

我一直在寻找一种方法来从 SVG 中获取点并将其应用到 Path2D 画家中。

解析任务不是我的重点,问题是了解这些点在 canvas 中的工作原理以及如何将其应用于 Path2D

例如,假设我有这个 SVG 标签:

<svg>
    <path d = "
    m 51.688 5.25
    c 10 20 30 40 50 60
    z">
    </path>
</svg>

这只是将抽屉移动到第一个点,使用这些点绘制一条曲线并关闭路径。

我试过将其应用于 Path2D,如下所示:

float x = 200, y = 200;
Path2D.Float painter = new Path2D.Float();

painter.moveTo(51.688+x, 5.25+y);
painter.curveTo(10+x, 20+y, 30+x, 40+y, 50+x, 60+y);
painter.closePath();

由于 SVG 中的点是亲戚,我将 x 和 y 字段求和为点,但我得到了这个结果:

这只是一个小测试,用于检查绘图是否有效,我需要将其用于更复杂的路径,因为我需要绘制多达 50 条 SVG 路径 Batik 不是一个好方法,考虑到只渲染我项目的一张 svg 图像太慢了。

那么我需要知道的是是否可以像这样直接使用它的点来绘制SVG路径。如果是,如何解决我的想法?如果不行,怎么画路径好呢? P.s.: 我的目标是 swing.

如果您想了解 SVG 路径命令的工作原理,最好的来源是阅读 SVG specification。那里解释得很清楚。不知道你为什么先来这里问

小写路径命令(如c)是相对的。它们的坐标应被视为距最后一段路径终点的偏移量。

所以相当于你的路径描述应该是:

painter.moveTo(51.688, 5.25);
painter.curveTo(51.688 + 10, 5.25 + 20, 51.688 + 30, 5.25 + 40, 51.688 + 50, 5.25 + 60);
painter.closePath();

(为了清楚起见,我在此处省略了您的 xy 参数)。