【问题标题】:Render a vector graphic (.svg) in C++在 C++ 中渲染矢量图形 (.svg)
【发布时间】:2010-11-14 07:49:46
【问题描述】:

我和一个朋友正在开发一款 2D 游戏,其中图形将是 .svg 文件,我们将通过先对它们进行光栅化或直接在表面上渲染它们来适当地缩放它们(在某些时候仍需要光栅化) .

问题是,我整天都在寻找一个库,它可以让我获取一个 .svg 文件并最终让它在 allegro 中呈现。据我所知,这将涉及光栅化为 allegro 可以读取的某种格式,然后 allegro 可以渲染“扁平化”图像。

那么,我可以使用哪些 C++ 库来获取 .SVG 文件并将其“展平”以便渲染它?该库显然也需要支持缩放,因此我可以缩放矢量图形然后对其进行光栅化。

我使用的是 Windows 和 Visual C++ Express 2010。

我试过 Cairo,但它只允许写入 .svg 文件,不允许读取 .svg 文件。我还研究了与 Cario 一起使用的 librsvg,但我在让它在 Windows 上正常工作时遇到了很多麻烦(因为它有很多 GNOME 依赖项)。如果您有任何指南可以让这些工作(在 Windows 上)也很好。

【问题讨论】:

    标签: c++ windows svg vector-graphics allegro


    【解决方案1】:

    wxsvg library 允许加载和操作 SVG 文件。 Qt 还有一个SVG module

    【讨论】:

    • wxSVG 看起来很完美,因为我有使用 wxWidgets 的经验。虽然我完全不知道如何在 Windows 上编译,但我最终会弄清楚的。谢谢:)
    • 此答案的更新:wxSVG 项目已移至其他页面。 wxsvg.sourceforge.net
    【解决方案2】:

    我的谈话有点晚了,但我建议你看看Nano SVG,这是一个非常轻量级的 svg 渲染器,不需要 cairo/libsvg。我在几个小时内编译并工作了 nanosvg。这是非常基本的,但它可以完成工作。

    【讨论】:

      【解决方案3】:

      SVG++ library 提供了对 SVG 读取的高级支持,因此可以在合理的时间内实现使用 allegro 渲染 SVG。

      【讨论】:

        【解决方案4】:

        https://github.com/sammycage/lunasvg 是一个不错的 svg 解析、渲染和操作库。纯c++编写的

        【讨论】:

        • 这是一个评论而不是一个答案。
        【解决方案5】:

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

        它使用 AGG 渲染到屏幕外表面。 支持渐变和各种形状。

        【讨论】:

        • 你用过这个库来渲染文本吗?我遇到文字问题。
        • @SubhamoySengupta 如果您对图书馆有任何问题,请向github.com/igagis/svgren/issues 提交问题
        • 如果发现错误,我会提交问题。由于看起来根本不支持文本,因此我不确定这是否会成为问题。因此问题。
        • @SubhamoySengupta 错误、问题、功能请求、问题 - 都转到 github.com/igagis/svgren/issues,不管它在 github 上被称为“问题”。虽然,您是对的,但文本不受支持,而且不太可能永远受支持。但是,可以有一些变通方法,例如,大多数 SVG 编辑器允许将文本转换为路径,这将使文本呈现为光栅图像。如果还有其他问题,请使用 github 问题跟踪器。
        【解决方案6】:

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

        【讨论】:

        • 今天我切换到具有 Cairo 依赖项的 SVGren 库,我应该说 - 在许多情况下,该库比 NanoSVG 差。
        【解决方案7】:

        nanosvg 和许多其他 c++ svg 解析器的帮助下,向您的应用程序添加 svg 渲染功能应该是微不足道的。秘诀如下:svg 解析器 + 矢量渲染库 = 简单的 svg 渲染。矢量渲染库可以是cairo 和许多其他库(想到nanovg,以及许多其他vg 库)。这是一个example,介绍了如何使用 cairo + fltk + nanosvg 组合支持 svg 渲染。现在,所有的 svg 解析器,以及 cairo 本身,以及其他渲染器,都有错误/缺点,但基本的 svg 支持永远不会出现问题。

        【讨论】:

          【解决方案8】:

          我一直在寻找一种真正快速的方法来在基于 Windows 操作系统的 MFC 项目中呈现 SVG 文件。

          在这种情况下,Microsoft Browser Web Browser ActiveX Control 被发现是一个理想的解决方案。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-14
            • 1970-01-01
            相关资源
            最近更新 更多