9

当 GDI+ 出现时,我记得所有关于它是如何在 Windows 中显示内容的“新、更快、更好”的方式的喧嚣。但每次我看它时,在我看来它实际上只是 GDI 的一个 COM 包装器。

真的吗?还是 GDI+ 真的是一个独立的图形库,只是与 GDI 共享一些范例?

就个人而言,我不确定它如何独立,但我从未以某种方式看到明确的声明。

4

3 回答 3

9

GDI+ 建立在 GDI 之上,并添加了更多功能。例如,GDI+ 增加了对透明度、抗锯齿位图拉伸等的支持……

GDI+主要是Object based API,GDI是function api。与 GDI 相比,GDI+ 中的大多数功能都没有经过硬件优化(由软件处理)。例如,在 GDI 中,BitBlt 直接由硬件处理。GDI+ 位图绘制功能没有。

GDI+ 是一个强大的 API,但要注意它的性能。

GDI+ 可用于 C++、COM 和 .NET

于 2009-07-09T12:27:02.430 回答
8

GDI+ 不是 COM。GDI+ 具有可从 C(或任何其他语言)调用的底层“平面”API,以及仅调用平面 API 的 C++ 中的面向对象包装器。.NET (System.Drawing) 和 Delphi 中也有包装器,它们也只是调用平面 API。它的工作方式与 GDI 完全不同,因为您不将对象(钢笔、画笔、字体)设置为设备上下文,而是将它们传递给绘图函数。它与 GDI 没有太多共同之处。我不知道 GDI+ 的实现是否使用 GDI - 但它可能不会,因为它有很多 GDI 中不可用的特性。

不幸的是,它比 GDI 慢。虽然它非常强大。

正如 decasteljau 同时指出的那样,性能问题可能来自于它不是在硬件中渲染的事实,这与 OpenVG 或 WPF 不同。我最近将 XNA 用于图形实时应用程序。

于 2009-07-09T12:28:06.503 回答
8

许多 GDI 函数由图形硬件加速,一些 GDI+ 例程可能在下面使用 GDI。但是大部分 GDI+ 是独立于 GDI 的。

一个重要且有说服力的例子是文本渲染。在 GDI+ 中,文本渲染完全在软件中完成;抗锯齿,字形像素拟合和其他效果是在没有显卡的情况下完成的。

替代文字
(来源:microsoft.com

微软的 Chris Jackson 有一篇有趣的博客文章,他描述了GDI 和 GDI+ 中文本渲染之间的速度差异

...我的 GDI 代码路径每秒渲染大约 99,000 个字形,而我的 GDI+ 代码路径每秒渲染大约 16,000 个字形。

另一个例子是画线。GDI+ 支持抗锯齿线/多边形和圆/椭圆绘图,而 GDI 不支持:

替代文字
(来源:microsoft.com(来源:microsoft.com
替代文字

替代文字
(来源:microsoft.com

于 2010-01-16T17:29:51.623 回答