GDI +只是GDI上的一层,还是新的东西?

Eur*_*lli 9 gdi+ gdi

当GDI +出现时,我记得所有关于如何在Windows中显示内容的"新的,更快的,更好的"方式的蠢蠢欲动.但每次我看着它,在我看来,它实际上只是围绕GDI的COM包装.

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

就个人而言,我不确定它是如何独立的,但我从未见过这样或那样的明确陈述.

dec*_*jau 9

GDI +是基于GDI构建的,并增加了更多功能.例如,GDI +增加了对透明度,抗锯齿位图拉伸等的支持......

GDI +主要是基于对象的API,GDI是函数api.与GDI相比,GDI +中的大多数功能都不是硬件优化(由软件处理).例如,在GDI中,BitBlt由硬件直接处理.GDI +位图绘制功能不是.

GDI +是一个功能强大的API,但要注意其性能.

GDI +提供C++,COM和.NET


Ore*_*ost 8

GDI +不是COM.GDI +有一个底层的"平面"API,可以从C(或任何其他语言)调用,而C++中的面向对象的包装器只调用平面API..NET(System.Drawing)和Delphi中也有包装器,它们也只是调用平面API.它与GDI完全不同,因为您没有将对象(笔,笔刷,字体)设置为设备上下文,而是将它们传递给绘图函数.它与GDI没有多少共同之处.我不知道GDI +的实现是否使用GDI - 但它可能不会,因为它有很多功能在GDI中不可用.

不幸的是,它比GDI慢.但它非常强大.

正如decasteljau在此期间指出的那样,性能问题可能来自于它不是以硬件呈现的,而不像OpenVG或WPF.我最近使用XNA,因为它用于图形实时应用程序.


Ian*_*oyd 8

图形硬件加速了许多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

  • 但要更直接地回答你的问题:GDI +是全新的.这实际上成为一个问题,因为它比GDI慢(即不是硬件加速),文本呈现与GDI不同(导致文本在.NET应用程序的不同部分看起来不同).它不是围绕GDI的COM包装器,事实上它甚至不是COM.这是平坦的C api.Microsoft创建了一组C++类,简化了对flat函数的调用..NET中的`System.Drawing`是一组也调用flat函数的类. (3认同)