在C++中渲染矢量图形(.svg)

12

我和一个朋友正在开发一款2D游戏,其中图形将以.svg文件的形式呈现,并且我们将通过首先将它们栅格化或直接在表面上渲染它们并适当缩放它们来使其合适。

问题是,我已经花了一整天的时间寻找一个库,让我能够获取一个.svg文件并最终在allegro中呈现它。据我所知,这需要将其光栅化为allegro可以读取的某种格式,然后allegro可以呈现“扁平化”的图像。

那么,有哪些C++库可用于获取 .SVG 文件并“扁平化”它以便我可以呈现它?该库显然还需要支持缩放,以便我可以缩放矢量图形然后对其进行栅格化。

我正在使用Windows和Visual C++ Express 2010。

我尝试过Cairo,但它只允许写入.svg文件而不允许读取.svg文件。我也研究了与Cario一起使用的librsvg,但我在Windows上使用它时遇到了很多问题(因为它有大量的GNOME依赖项)。如果您有任何关于如何使它们(在Windows上)正常工作的指南,那也太棒了。

8个回答

10

wxSVG看起来很完美,因为我有wxWidgets的使用经验。虽然我绝对不知道如何在Windows上编译,但最终我会弄明白的。谢谢 :) - Brad
4
回答更新:wxSVG项目已经迁移到了另一个页面。http://wxsvg.sourceforge.net/ - Marleen Schilt

6
我有点晚加入对话,但我建议您查看Nano SVG,这是一个极其轻量级的SVG渲染器,不需要cairo/libsvg。我在几个小时内编译并使nanosvg运行。它非常基础,但可以完成工作。

3

这更像是一条评论而不是一个答案。 - Yan Sklyarenko

2

SVG++库提供了高级的SVG读取支持,使得使用Allegro渲染SVG可以在合理的时间内实现。


2

你用过这个库来渲染文本吗?我在处理文本方面遇到了问题。 - Subhamoy S.
如果您在使用该库时遇到任何问题,请@SubhamoySengupta提交问题至https://github.com/igagis/svgren/issues。 - igagis
3
如果我发现了一个漏洞,我会提交一个问题。由于看起来根本不支持文本,我不确定这是否是一个问题。因此有这个问题。 - Subhamoy S.
@SubhamoySengupta 错误、问题、功能请求、疑问 - 都应提交到github.com/igagis/svgren/issues,无论在github上它被称为“issue”。虽然文本不受支持,而且可能永远不会得到支持。但是,可以有解决方法,例如,大多数SVG编辑器允许将文本转换为路径,这将使文本呈现为光栅图像。如果还有任何问题,请使用github问题跟踪器。 - igagis

1

就我个人而言,在我的Simple Viewer GL中使用NanoSVG。它让我能够轻松地在几行代码中加载和光栅化SVG图像。但是这个库对SVG的支持较弱。


1
今天我切换到了带有Cairo依赖的SVGren库,我必须说 - 在许多情况下,该库比NanoSVG更差。 - Andrey A. Ugolnik

1
借助nanosvg和许多其他c++ svg解析器的帮助,将svg渲染能力添加到您的应用程序中应该是微不足道的。配方如下:svg解析器+矢量渲染库=微不足道的svg渲染。矢量渲染库可以是cairo和许多其他库(nanovg也是其中之一,以及许多其他vg库)。这是一个使用cairo + fltk + nanosvg组合支持svg渲染的示例。现在,所有的svg解析器以及cairo本身和其他渲染器都有缺陷/缺点,但基本的svg支持永远不应该成为问题。

0

我正在寻找一种在基于Windows OS的MFC项目中快速渲染SVG文件的方法。

在这种情况下,微软浏览器Web浏览器ActiveX控件被发现是一个理想的解决方案。

enter image description here

这里是使用浏览器控件加载SVG文件的结果。

Rendering SVG file using a Browser Control


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接