GDI

Graphics Device Interface,即图形设备接口,是Windows API的一个重要组成部分。它是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+是GDI的后续版本,最早于2001年随WinXP一起推出,后来又被包装进.NET框架的托管类库中,成为.NET中窗体绘图的主要工具。

GDI+主要提供了以下三类服务:

(1)二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类。

(2)图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。因此,GDI+为我们提供了Bitmap、Image等类。它们可用于显示、操作和保存BMP、JPG、GIF等图像。

(3)文字显示:GDI+支持使用各种字体、字号和样式来显示文本。

GDI接口是基于函数的,而GDI+是基于C++ OO的编程接口,因此使用起来比GDI要方便。因为GDI+实际上是GDI的封装和扩展,所以执行效率一般要低于GDI。

【GDI】 GDI与GDI+相关推荐

  1. 3. GDI+ Bitmap和GDI HBITMAP互转

    之所以将GDI+ Bitmap和GDI HBITMAP互转单独挑出来写下,是因为实际应用中经常我们需要GDI和GDI+换用,特别是需要兼顾效率和渲染效果的场合,更是通常使用GDI+做平滑/抗锯齿,用G ...

  2. C# 中的 gdi 而不是 gdi+

    我记得有多种方法的,不过我现在的部分资料还没恢复,下面这个是网友的. 我记得我用是因为 gdi+ 的字符串绘画时无法限制在区域内,而 gdi 是可以的.这实在是奇怪. ---------------- ...

  3. Direct2D开发:Direct2D 和 GDI 互操作性概述

    本主题说明如何结合使用 Direct2D 和 GDI(可能为英文网页).有两种方法可以结合使用 Direct2D 和 GDI:您可以将 GDI 内容写入与 Direct2D GDI 兼容的呈现器目标, ...

  4. 使用bitblt提高GDI+绘图的效率(转)

    最近在做使用GDI+绘制K线界面发现传统的GDI+绘制方式效率比较低,根本无法满足K线界面及时刷新的速度要求. 所以做了个GDI+绘制图形界面的试验,改试验主要在一个600×600的区域内每隔10MS ...

  5. GDI+编程说明及小结

    原文地址:http://blog.csdn.net/byxdaz/article/details/5972759 GDI+(Graphics Device Interface Plus图形设备接口加) ...

  6. cimage和gdi绘图效率比较_GDI+和GDI绘图性能对比实验

    龙源期刊网 http://www.qikan.com.cn GDI+ 和 GDI 绘图性能对比实验 作者:王克茹 来源:<科技创新与应用> 2013 年第 25 期 摘 要:本文通过完全相 ...

  7. GDI+ 使用指南(basic guiding of GDI plus )

    其实这个也没有什么用,毕竟已经是过时的技术了.不过技术的更新跟实际的使用还是有差距了,免不了还是要用这种过时的技术,所以还是记录下来,方便以后查阅. GDI+没记错的话是跟随XP诞生的,是XP系统上的 ...

  8. Chapter 3.GDI/DirectDraw Internal Data Structures

    说明,在这里决定跳过第二章,实在是因为里面涉及的内容太理论,对我而言又太艰深 3.1 HANDLES AND OBJECT-ORIRNTED PROGRAMMING In normal object- ...

  9. C# WinForm开发系列 - GDI+【转】

    http://blog.csdn.net/blue_sky6/article/details/53811435?locationNum=6&fps=1 C# WinForm开发系列 - GDI ...

  10. GDI对象泄漏检查的一点经验

    程序出现GDI泄漏,在GDIndicator中,Total字段的两个值不一致的情况,前面比后面大了很多,一直没有找到为何,以为是没释放就会导致不一致: 查看了程序代码,一直无法找到泄漏的地方,于是找各 ...

最新文章

  1. python简单代码演示效果-用python画爱心及代码演示
  2. 已解决:k8s集群启动后,默认创建哪些namespace?
  3. Oracle connet by prior 关键字的简单介绍和用法
  4. js变量提升_学习笔记:JS中的作用域和预解析
  5. new Date()时间
  6. cmd命令大全/cmd命令提示符大全
  7. 代码生成利器-NCodeGenerate 教程(2) NCodeGenerate的代码公用之一
  8. mysql 多表并列查询_Mysql多表查询(两张独立表,一张关系表)
  9. php函数copy和rename的区别
  10. 借助Intent实现Android工程中Activity之间Java对象的传递——实现Serializable接口
  11. python 桌面数据库_python数据库操作笔记
  12. testbed代码审查信息提取
  13. php util,PHP中文工具类ChineseUtil怎样转换汉字与拼音
  14. 原生android 操作系统,为什么氢OS被称为最接近原生安卓的操作系统?
  15. zookeeper基础知识以及常用命令
  16. Winserver2016安装Exchange2016总结(一堆坑)
  17. NetworkX学习笔记07:泊松分布与幂律分布
  18. 风格迁移1-02:Liquid Warping GAN(Impersonator)-源码模型测试-报错解决
  19. 阿里网盘内测 你申请了吗? 阿里网盘内测资格
  20. lin总线可以控制几个节点_[LIN].LIN总线详解

热门文章

  1. 用BufferedImage和Graphics实现简单鼠标手绘画板(Java)
  2. 写基于stm32智能家居控制系统设计论文
  3. pythondjangoddos_django 服务器选择
  4. linux下bin安装包制作
  5. 输入三角形的三条边长,判断其是否能构成三角形,并计算其面积。
  6. 高精度电流源如何设计出来?
  7. layDate开始时间和结束时间
  8. RFID物流仓储应用解决方案-铨顺宏
  9. PIC18F系列单片机外部中断
  10. 英语口语练习十六之I was quite impressed by... (我对……的印象很深刻)的用法