c - 了解解析 SVG 文件格式

标签 c image svg

首先,gist here

要点中的 Map.svg 是我正在使用的原始 map ,它是从维基共享资源中获取的。

现在,在原始 svg 中,得克萨斯州东部海岸外有一 block 陆地。我使用 Inkscape 删除了它,它以一种奇怪的新方式重新编写了路径。差异包含在要点中。

现在,这种编写路径的新方法破坏了我的解析器逻辑,我正试图了解发生了什么。我希望这里有人对我所做的 SVG 文件格式有更多了解。我承认我没有通读整个 SVG 标准规范,但是我读过的部分没有提到任何关于缺少命令或相对坐标的内容。然后我可能一直在看不正确的规范,不确定。

按照我的理解,SVG 路径数据非常简单,如下所示:

(M,L,C)[point{n}] .... [Z] 然后重复 ad-nauseum

现在我试图理解的部分是这个新的 Inkscape 已经写出了看起来像相对坐标的东西,没有像 L 这样的命令,或者以某种方式隐含了 L。我的直觉告诉我这里发生的事情对某些人来说是显而易见的。为了它的值(value),我正在用 C 语言进行解析。

最佳答案

如果您正在解析 SVG,为什么不查看 SVG 规范?

Start a new sub-path at the given (x,y) coordinate. M (uppercase) indicates that absolute coordinates will follow; m (lowercase) indicates that relative coordinates will follow. If a moveto is followed by multiple pairs of coordinates, the subsequent pairs are treated as implicit lineto commands.

发件人:http://www.w3.org/TR/2011/REC-SVG11-20110816/paths.html#PathDataMovetoCommands

你说,

The way I understood it, SVG path data was very straight forward, something like this: (M,L,C)[point{n}] .... [Z]

我不知道你从哪里得到这些信息。停止从该来源获取您的信息。

I will admit I have not read through the entire SVG standard spec...

没有人阅读整个规范。只需专注于您目前正在实现的部分。您也可以从 SVG Tiny 开始,暂时使用该子集。

路径语法 是编写解析器时应该开始的地方。如果你看不懂,那就买一本关于编译器的书。

路径语法:http://www.w3.org/TR/2011/REC-SVG11-20110816/paths.html#PathDataBNF

关于c - 了解解析 SVG 文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7515986/

相关文章:

javascript - 带动画的 Google map SVG 标记

c - 如何获取函数在调用栈中的位置?

html - 纯 CSS : Show image2 above/over/on top image1 on hover

image - 在 Picasa RSS 提要中变大(原始大小的图像)

c# - 图像源不会显示图片

javascript - 在 React 中用内联 svg 替换图像元素

css - 如何用SVG feColorMatrix模仿PS渐变图效果?

c - 如何在for循环中使用random_shuffle来实现不同的不同洗牌数组?

调用连接需要太多时间

c++ - gdb核心文件丢失