c++ - Microsoft 推荐使用哪种 native API 来渲染 2D 图形?

标签 c++ windows image winapi

根据 MSDN's listing , GDI 和 GDI+ 都是遗留的。那么在使用 Windows API 编写应用程序时,应该使用什么来渲染 2d 图形?

Direct2D、WIC、DirectComposition(这对我来说是新的)、GDI+、GDI?

注意:不是 2d 游戏 - 只是 2d 图片。

最佳答案

GDI 或 GDI+ 都是满足基本需求的不错选择。

操作系统仍然在所有地方使用 GDI,所以我不太确定他们所说的“遗留”是什么意思。像这样的词通常没有意义,所以忽略它们你不应该感到难过。将这些 API 标记为“遗留”的人可能是那些告诉您所有 Win32 都是遗留的人,却没有意识到他们如此喜爱的这些“现代”GUI 框架是建立在 Win32 之上的,并且无法使用没有它也能正常工作。

如果您需要 GDI+ 提供的额外功能(例如透明性等)和/或如果您使用 C++ 编程并且更喜欢其基于类的 API 而不是 GDI 的平面 C 风格 API,请使用 GDI+。但请注意,如果您的应用程序使用 GDI+,则必须将 Gdiplus.dll 库重新分发给运行 Windows 2000 及更早版本的用户。基于 GDI 的应用程序始终开箱即用。

这并不是说您不应该调查新的竞争者。据推测,Direct2D 旨在与 GDI 和 GDI+ 进行良好的互操作。唯一的问题是,许多开发人员无法要求所有客户升级到 Windows Vista 或更高版本。支持 XP 似乎仍然是一个有值(value)的目标(至少为这些用户提供最小的功能子集),如果您在 Direct2D 或其中一个新奇特的框架中编写整个 UI,那实际上是不可能的。我还没有真正看到为标准的业务线应用程序切换到 Direct2D 的优势(我确信游戏和其他需要 3D 效果的程序有优势)。您可能对以下内容感兴趣 comparison between Direct2D and GDI ,它们都是二维的硬件加速图形 API。

关于c++ - Microsoft 推荐使用哪种 native API 来渲染 2D 图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11659962/

相关文章:

C++:覆盖纯虚拟成员变量?

c++ - 如何在事件发生时启动线程并正确关闭他们的手

ios - 调整图像大小但保留硬边

C++ : const references and initialization order

c++ - 为什么 C++ 函数调用便宜?

windows - 在 Windows 中使用特定文件扩展名查找文件中的单词

c++ - Windows 控制台代码页 866

python - PIL image.open() 适用于某些图像但不适用于其他图像

android - android java中的图像颜色校正

c++ - 即使初始要求为真,也不会进入 for 循环