
_START_ARTICLE_
GDI+
_START_SECTION_
简介
_START_PARAGRAPH_
在DOS时期，应用程序如果要对于显示设备做输出的话，必须使用INT 10，或对于VGA卡直接I/O，或直接对VRAM所在的记忆体位置作填值。但VGA卡当时日新月异，各家的VGA卡在其I/O ports的定义并不一致，虽中间有推出一个名为VESA SVGA的显卡驱动程序的共用标准，但由于DOS时先天的64KB的标签页限制，仍有许多不便。_NEWLINE_微软在开发Windows时，发现这个问题，于是决定打造一个GDI子系统，将显示设备改以API的方式进行操作，以便将各VGA卡的差异通过各VGA卡厂商自行制作的驱动程序来衔接GDI，来打消各VGA卡在操作上的彼此差异。_NEWLINE_但微软很快就被其他的程序开发者告知，GDI太慢了，因此Microsoft就再出一个WING用于Windows 3.0/3.1，让应用程序能够直接对VRAM进行填值，以加速绘图的相关计算。_NEWLINE_后来，WING再改为DirectDraw成为DirectX的一部分，直到DirectX 7。（DirectX 8以后，DirectX中2D与3D显示技术合并，开始进入全3D的贴图计算方式）_NEWLINE_微软在推.Net Framework时，又再把GDI用.Net Framework方式进行封装，可是由于GDI本身的限制，再加上微软自己在MSDN Library上面的文件在实用性上欠缺实证（有些功能已有技术文件，但从未做出实际可用的功能），再加上GDI+在图形计算与显示不算快，以及先后饱受远程代码运行的漏洞等问题之下，使得其无法成为微软在图形子系统的主流。_NEWLINE_直到DirectX 10时，已经进入以DirectX的COM为基础，以.Net Framework方式进行封装的XNA之时代。XNA身兼DirectX的性能与.Net Framework的使用便利性，目前被应用于XBOX系列的游戏主机上，现已成为新一代的图形子系统的主流。
_START_SECTION_
GDI+
_START_PARAGRAPH_
GDI+从Windows XP操作系统开始引入，提供二维的矢量图形，改进旧有的GDI，加强的可视化属性，例如边界，渐变和透明。通过GDI+，能够直接将BMP转成JPG或其它格式的图片，还能够生成SVG、Flash等。GDI+ 使用ARGB的值来表示颜色。GDI+的双缓冲技术可以提高绘图效率，可避免屏幕闪烁。_NEWLINE_GDI+号称提供了硬件加速功能，可以直接访问硬件。但这似乎是夸饰的说法，GDI+无法直接使用VGA卡上的GPU来加速绘图的相关计算，因此在绘图性能上远远不及DirectX，只能做到Lock存储器进行操作。（GDI+只是一组重新封装GDI的API，DirectX则是从COM到底层的显卡驱动程序的组合）_NEWLINE_随GDI+推出了加强型EMF，即EMF+，可以同时支持GDI和GDI+。Microsoft .NET通过System.Drawing名字空间提供对GDI+的支持。The GDI+ 的DLL可移植到旧有的Windows版本上。_NEWLINE_GDI+ 类似Apple的Quartz 2D子系统，以及属于开放源代码（open-source）的libart和Cairo库。