替换 CDC 矢量图形的快速库
Posted
技术标签:
【中文标题】替换 CDC 矢量图形的快速库【英文标题】:Fast library to replace CDC vector graphics 【发布时间】:2010-09-17 06:13:48 【问题描述】:我有一个成熟的 MFC C++ 应用程序,它使用 Win32 GDI 上的 CDC 包装在屏幕上显示和打印。虽然它多年来一直在优化,但我想用更快的东西替换它。图形包括渲染的三角形表面模型、复杂的折线和多边形以及大量文本。需要满足以下条件;
显示的矢量数量可能非常大。例如,单个曲面三角形在渲染时可能会生成数字线和实心填充。目前,这些信息没有存储在任何地方,它是动态生成和绘制的。 SDK应该支持限制缓冲向量的总数,否则容易耗尽内存。
SDK 应该能够渲染到任何 CWnd 派生类,包括 CView 和 ScrollView 类。
SDK 应支持打印到任何 Windows 打印设备,
SDK 应该足够低级,以使来自低级 CDC/GDI 调用的端口相对简单。
开源总是不错的,但一次性费用高达 2000 美元,可选升级/支持也可以。每个用户的许可费用是不可接受的,
访问源代码将是一个很大的好处,特别是在 Windows CE / Mobile 上运行 SDK 部分的想法。
我目前处理自己的 3d 到 2d 视口管理。如果没有合适的低级 SDK,则更高级别的 SDK 必须能够很好地处理 3d,并在 32 位 Windows 平台上处理数百万个三角形、多边形和文本实体。
有什么建议吗?在您提出的建议中列出具体的优缺点将不胜感激。
【问题讨论】:
【参考方案1】:我认为 DirectX 或 SDL 将满足您的需求。它们是为 3D 设计的,但也适用于 2D。两者都支持 Windows CE / Mobile,SDL 也可用于一堆非 Microsoft 操作系统。
不幸的是,库不支持与 GDI 的直接兼容性。但是您可以通过创建一个转换器类来解决问题,该类将接受来自您的 GDI 设计的应用程序类的所有输出图形,并转换格式以适应 DirectX 或 SDL 类的需求(取决于您要使用什么)。
我个人做过一次这样的转换器类。我有一个使用 SDL 为 Pocket PC 编写的游戏,我需要将它移植到 Palm 设备上。在那里我不得不使用不同的图形库(我现在不记得库的名称),但我成功地将所有 SDL 函数输出移植到其他库所需的格式。我需要更改我的应用程序以调用转换器(包装器)函数,该函数将调用转发到 Palm 或 Pocket PC 库,具体取决于它当前运行的设备。所以我认为你可以对转换 GDI -> DirectX 或 GDI -> SDL 做同样的事情。
【讨论】:
【参考方案2】:我曾经为一个项目评估过 FastGraph (http://www.fastgraph.com)。我喜欢在我写的小测试程序中,它非常快。由于外部原因(与我评估的库无关),我们最终没有使用它,所以我没有更多的实践经验。
【讨论】:
感谢您的链接。多年前我在 DOS 上使用过 FastGraph,当时很喜欢。没想到它还在。以上是关于替换 CDC 矢量图形的快速库的主要内容,如果未能解决你的问题,请参考以下文章
Android 安装包优化Android 中使用 SVG 图片 ( 使用 appcompat 支持库兼容 5.0 以下版本的 Android 系统使用矢量图 )