微软推荐使用哪个本地API来渲染2D图形?

5
根据MSDN的说明,GDI和GDI+都已经过时。因此,在使用Windows API编写应用程序时,应该使用什么来渲染2D图形呢?
Direct2D、WIC、DirectComposition(这对我来说是新的)、GDI+、GDI?
注意:不是2D游戏,只是2D图像。

DirectComposition看起来需要Windows 8。顺便说一句,这可能就是我没听说过它的原因。 - chris
2
我不会担心微软的建议,因为它们往往随着每个月发布的API而改变。当.NET被标记为“遗留”时,GDI仍将存在。 - AJG85
相关问题:https://dev59.com/Q2kw5IYBdhLWcg3wSogs - RED SOFT ADAIR
2个回答

5
无论是 GDI 还是 GDI+ 都可以满足基本需求。操作系统仍然在很多地方使用 GDI,因此我不太确定他们所说的“遗留”是什么意思。像这样的词通常没有实际含义,所以您不必感到过于担心。将这些 API 标记为“遗留”的人可能是那些告诉您所有 Win32 都是遗留技术而没有意识到这些他们非常喜欢的“现代” GUI 框架都是建立在 Win32 之上的,没有它就无法正常运行。
如果需要额外的功能(如透明度等)和/或者您在 C++ 中编程并且更喜欢其基于类的 API,则使用 GDI+。但请注意,如果您的应用程序使用了 GDI+,则必须向运行 Windows 2000 和早期版本的用户重新分发 Gdiplus.dll 库。基于 GDI 的应用程序将始终能够开箱即用。
这并不是说您不应该调查新的竞争对手。据说,Direct2D 设计得很好,可以与 GDI 和 GDI+ 良好地互操作。唯一的问题是,许多开发人员无法要求所有客户升级到 Windows Vista 或更高版本。支持 XP 仍然是一个有价值的目标(至少为那些用户提供最小的功能子集),如果您将整个 UI 都写在 Direct2D 或其中一个新的花哨框架中,这是不可能的。对于标准的业务应用程序,我还没有看到切换到 Direct2D 的优势(我相信对于需要 3D 效果的游戏和其他程序有优势)。您可能会对以下 Direct2D 和 GDI 之间的比较 感兴趣,它们都是二维、硬件加速的图形 API。

我知道GDI和GDI+不会很快过时并且可以使用,但是MSDN对“遗留”的定义非常明确:那些已经过时且不应在新应用程序中使用的技术。 - Jesse Good
2
那么,我应该更明确地说,那篇特定的MSDN条目是错误的吗?或者至少是由某个过于热心的市场部门的人编写的? - Cody Gray
我认为我们可以将“new”解释为从Windows 8开始,因为我知道“在编写Metro风格的应用程序时不支持GDI和GDI +”,所以这取决于您的需求。 - Jesse Good
还有点过早了,不是吗?考虑到Windows 8甚至还没有发布,客户们将如何运行我们使用“非遗留”API编写的应用程序呢?这一行文字在MSDN上至少已经存在了几个月,甚至在Win 8的公开预览版本之前就已经存在了。此外,还有一大类应用程序根本无法作为Metro应用程序运行。 - Cody Gray

4
如果您没有非常必要支持XP(让它死了吧!),我强烈建议使用Direct2D。以下是多个原因说明为什么对于所有新的开发项目而言,Direct2D都是明智的选择:
  • 通常更快的渲染速度(包括有和无边缘抗锯齿渲染)
  • 自从引入Vista以来,GDI不再支持硬件加速(由于新的驱动程序模型)
  • 更好地与Direct3D(如果需要)、DirectWrite、DirectComposition等集成
  • 更好地利用新的GPU功能
  • 内置许多位图效果
  • GDI不允许用于Metro样式的应用程序
因此,我建议任何开始新应用程序开发的人都使用Direct2D,而不是GDI/GDI+。

3
很不幸,我深知在业内仍有惊人数量的用户在使用XP,并且有些私人用户出于各种原因拒绝升级到其他系统,可能是因为硬件限制等等。总的来说,这会给任何想开发应用程序并拥有最广泛用户群体的人带来更多压力。 - johnathan

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