在 win32 (C++) 中打开、操作和渲染 SVG 文件

Posted

技术标签:

【中文标题】在 win32 (C++) 中打开、操作和渲染 SVG 文件【英文标题】:opening, manipulating and rendering SVG files in win32 (C++) 【发布时间】:2012-11-29 13:24:15 【问题描述】:

我想打开 SVG 文件,操作其中定义的形状并将这些形状渲染到 windows (vista/7/...) 的屏幕上。

我使用 C++ 构建器。我一直在考虑使用 cairo 或 agg 来渲染形状,但我需要一个 SVG 解析器库,它提供渲染器和对 SVG 文件中定义的形状的完全访问权限。

有谁知道我可以用来实现这一目标的库吗?

出于金钱原因,我不能使用 Qt。

感谢您的帮助。

【问题讨论】:

你试过用谷歌搜索 C++ svg 库吗? 是的,但有很多奇特的解决方案,我想找到一种强大的方法来做到这一点。我知道有一些 SVG 解析器,但我还需要找到一个包含 SVG 渲染器的解析器,因为我没有足够的时间来编写渲染器。我一直在为 rsvg 添加外观。 【参考方案1】:

AGG 源包含一个 SVG 查看器 :-)

即使您正在编写商业产品,Qt 许可证也应该没问题。

【讨论】:

是的,但它不是最新的。我试图显示一个包含渐变填充的 svg 文件,而 AGG SVG 查看器无法显示它,而 rsvg SVG 查看器可以。 我能想到的唯一其他来源是 InkScape,但如果 Qt LGPL 令人望而却步,那么 InkScape GPL 肯定会!【参考方案2】:

我认为最好的方法是 librsvg 和 libcairo。两者功能都非常丰富且易于使用。我可以打开几个 SVG,将它们渲染到屏幕上并处理它们以缩放和移动它们。

【讨论】:

【参考方案3】:

通用的“将 SVG 渲染到 cairo 上下文”解决方案是 librsvg:https://live.gnome.org/LibRsvg

但是,Qt 和 librsvg 都在 LGPL 下获得许可(这并不禁止您在商业产品中使用它)。

【讨论】:

是的,正如我在第一条消息中评论的那样,我一直在查看这个库,它似乎是最新的并且非常好。 是否可以在 windows 机器上安装 librsvg。我正在尝试使用 image magick api。【参考方案4】:

我最近用 C++ 编写了一个小型 SVG 渲染器库:https://github.com/igagis/svgren

它使用 Cairo 渲染到屏幕外表面。支持渐变和各种形状。 它使用了我的另一个名为 svgdom 的库,它实际上加载并提供了 SVG 的 DOM,可以在渲染之前对其进行操作。

【讨论】:

以上是关于在 win32 (C++) 中打开、操作和渲染 SVG 文件的主要内容,如果未能解决你的问题,请参考以下文章

C++ Win32 FPS 和 DeltaTime 实现

在井字游戏 C++ 中使用“新游戏”按钮,win32 应用程序初学者

如何在c++编程中调用火狐浏览器,进行打开指定URL,刷新标签页等操作??

如何使用 Win32 句柄在 C++ 中获取文件名? [复制]

将 Unity3D 用作带有 OpenGL 应用程序的 Win32 c++ 的 GUI

有没有办法在可视化环境中使用Win32 C ++源码?