Windows GDI和GDI+ 区别和联系简介
来源:互联网 发布:mac不能玩魔兽世界 编辑:程序博客网 时间:2024/05/14 05:53
GDI在Windows中定义为Graphics Device Interface,即图形设备接口,是Windows API(Application Programming Interface)的一个重要组成部分。它是Windows图形显示程序与实际物理设备之间的桥梁,GDI使得用户无需关心具体设备的细节,而只需在一个虚拟的环境(即逻辑设备)中进行操作。它的桥梁作用体现在: (1)用户通过调用GDI函数将逻辑空间的操作转化为具体针对设备驱动程序的调用。 为实现图形设备无关性,Windows 的绘图操作在一个设备描述表上进行。用户拥有自己的"逻辑坐标"系统,它独立于实际的物理设备,与"设备坐标"相对应。开发Windows应用程序时,程序员关心的是逻辑坐标,我们在逻辑坐标系上绘图,利用GDI将逻辑窗口映射到物理设备上。 (2)GDI能检测具体设备的能力,并依据具体的设备以最优方式驱动这些设备,完成真实的显示。 GDI函数大致可分类为:设备上下文函数(如GetDC、CreateDC、DeleteDC)、 画线函数(如LineTo、Polyline、Arc)、填充画图函数(如Ellipse、FillRect、Pie)、画图属性函数(如SetBkColor、SetBkMode、SetTextColor)、文本、字体函数(如TextOut、GetFontData)、位图函数(如SetPixel、BitBlt、StretchBlt)、坐标函数(如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen)、映射函数(如SetMapMode、SetWindowExtEx、SetViewportExtEx)、元文件函数(如PlayMetaFile、SetWinMetaFileBits)、区域函数(如FillRgn、FrameRgn、InvertRgn)、路径函数(如BeginPath、EndPath、StrokeAndFillPath)、裁剪函数(如SelectClipRgn、SelectClipPath)等。 GDI虽然使程序员得到了一定程度的解脱,但是其编程方式仍很麻烦。譬如,显示一张位图,程序员需要进行"装入位图―读取位图文件头信息―启用设备场景―调色板变换"等一连串操作。而有了GDI+,这些问题便迎刃而解了。 顾名思义,GDI+是GDI的增强版。它是微软在Windows 2000以后操作系统中提供的新接口,其通过一套部署为托管代码的类来展现,这套类被称为GDI+的"托管类接口"。GDI+主要提供了以下三类服务: (1) 二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类; (2) 图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。因此,GDI+为我们提供了Bitmap、Image等类,它们可用于显示、操作和保存BMP、JPG、GIF等图像格式。 (3) 文字显示:GDI+支持使用各种字体、字号和样式来显示文本。 GDI接口是基于函数的,而GDI+是基于C++类的对象化的应用程序编程接口,因此使用起来比GDI要方便。
0 0
- Windows GDI和GDI+ 区别和联系简介
- Windows GDI和GDI+区别
- GDI和GDI+的区别和联系
- Windows GDI和GDI+区别(实例剖析)
- Windows GDI和GDI+区别(实例剖析)
- Windows GDI和GDI+区别(实例剖析)
- GetBitmapBits和GetDIBits的区别(Windows GDI)
- GetBitmapBits和GetDIBits的区别(Windows GDI)
- GDI和CDC区别
- Windows GDI和GDI+编程实例剖析
- Windows GDI和GDI+编程实例剖析
- Windows GDI和GDI+编程实例剖析
- Windows GDI和GDI+编程实例剖析
- Windows GDI和GDI+编程实例剖析
- Windows GDI和GDI+编程实例剖析
- Windows GDI和GDI+的比较
- Windows GDI和GDI+编程实例剖析
- “GDI“ 和“GDI+”有区别吗?
- ProgressBar样式总结与自动填充方法(代码)
- 看乔布斯10大营销法则抓住微信营销机会
- 凡科网http://hikaru.faisco.cn/
- eclipse安装最新版SVN 1.8
- C#调用C++方法,C#使用c++方法返回类或结构体
- Windows GDI和GDI+ 区别和联系简介
- linux svn 代码迁移 checkout
- 驱动分层-挂载设备对象示例
- JavaScript面试后的反思
- Ecmail Call to a member function get_users_count() on a non-object解决方法
- java之static 和 final学习
- C++ 多继承和虚继承的内存布局
- 笔记本中WIN7系统如何快速关闭或打开无线网络
- hadoop-eclipse-plugin-2.2.0.jar放到eclipse的plugins文件夹后,eclipse中没有map/reduce项