在 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 应用程序初学者
如何在c++编程中调用火狐浏览器,进行打开指定URL,刷新标签页等操作??
如何使用 Win32 句柄在 C++ 中获取文件名? [复制]