【问题标题】:How to draw SVG path points in Java using Path2D (or any Shape drawer)?如何使用 Path2D(或任何形状抽屉)在 Java 中绘制 SVG 路径点?
【发布时间】:2019-07-22 13:37:50
【问题描述】:

我一直在寻找一种方法来获取 SVG 的积分并将其应用于 Path2D 画家。

解析任务不是我的重点,问题是了解这些点在画布中的工作原理以及如何将其应用于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

【问题讨论】:

    标签: javascript java html svg path-2d


    【解决方案1】:

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

    小写路径命令(如c)是relative。它们的坐标应该被认为是距离最后一个路径段的终点的偏移量。

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

    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 参数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-03
      • 2016-09-09
      • 2014-03-20
      • 1970-01-01
      • 2019-08-28
      • 2012-03-16
      • 2018-01-11
      • 2021-09-14
      相关资源
      最近更新 更多