当GDI +出现时,我记得所有关于如何在Windows中显示内容的"新的,更快的,更好的"方式的蠢蠢欲动.但每次我看着它,在我看来,它实际上只是围绕GDI的COM包装.
真的吗?或者GDI +真的是一个独立的图形库,只是与GDI共享一些范例?
就个人而言,我不确定它是如何独立的,但我从未见过这样或那样的明确陈述.
GDI +是基于GDI构建的,并增加了更多功能.例如,GDI +增加了对透明度,抗锯齿位图拉伸等的支持......
GDI +主要是基于对象的API,GDI是函数api.与GDI相比,GDI +中的大多数功能都不是硬件优化(由软件处理).例如,在GDI中,BitBlt由硬件直接处理.GDI +位图绘制功能不是.
GDI +是一个功能强大的API,但要注意其性能.
GDI +提供C++,COM和.NET
GDI +不是COM.GDI +有一个底层的"平面"API,可以从C(或任何其他语言)调用,而C++中的面向对象的包装器只调用平面API..NET(System.Drawing)和Delphi中也有包装器,它们也只是调用平面API.它与GDI完全不同,因为您没有将对象(笔,笔刷,字体)设置为设备上下文,而是将它们传递给绘图函数.它与GDI没有多少共同之处.我不知道GDI +的实现是否使用GDI - 但它可能不会,因为它有很多功能在GDI中不可用.
不幸的是,它比GDI慢.但它非常强大.
正如decasteljau在此期间指出的那样,性能问题可能来自于它不是以硬件呈现的,而不像OpenVG或WPF.我最近使用XNA,因为它用于图形实时应用程序.
图形硬件加速了许多GDI函数,而一些GDI +例程可能会使用下面的GDI.但大多数GDI +都与GDI无关.
一个重要且有说服力的例子是文本呈现.在GDI +中,文本渲染完全在软件中完成; 在没有视频卡的情况下完成抗锯齿,字形像素拟合和其他效果.
alt text http://i.msdn.microsoft.com/ms533818.fontstext10(en-us,VS.85).png
微软的克里斯杰克逊有一篇有趣的博客文章,他描述了GDI和GDI +中文本渲染之间的速度差异:
...我的GDI代码路径每秒渲染大约99,000个字形,而我的GDI +代码路径每秒渲染大约16,000个字形.
另一个例子是线条画.GDI +支持抗锯齿线/多边形和圆/椭圆绘图,而GDI不支持:
alt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art33(en-us,VS.85).png 替代文字http://i.msdn.microsoft.com/ms536351.aboutgdip02_art34(en-us, VS.85)巴纽
alt text http://i.msdn.microsoft.com/ms536351.aboutgdip02_art36(en-us,VS.85).png