如何使用 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();
(为了清楚起见,我在此处省略了您的 x
和 y
参数)。
我一直在寻找一种方法来从 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();
(为了清楚起见,我在此处省略了您的 x
和 y
参数)。