【GDI】 GDI与GDI+
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+相关推荐
- 3. GDI+ Bitmap和GDI HBITMAP互转
之所以将GDI+ Bitmap和GDI HBITMAP互转单独挑出来写下,是因为实际应用中经常我们需要GDI和GDI+换用,特别是需要兼顾效率和渲染效果的场合,更是通常使用GDI+做平滑/抗锯齿,用G ...
- C# 中的 gdi 而不是 gdi+
我记得有多种方法的,不过我现在的部分资料还没恢复,下面这个是网友的. 我记得我用是因为 gdi+ 的字符串绘画时无法限制在区域内,而 gdi 是可以的.这实在是奇怪. ---------------- ...
- Direct2D开发:Direct2D 和 GDI 互操作性概述
本主题说明如何结合使用 Direct2D 和 GDI(可能为英文网页).有两种方法可以结合使用 Direct2D 和 GDI:您可以将 GDI 内容写入与 Direct2D GDI 兼容的呈现器目标, ...
- 使用bitblt提高GDI+绘图的效率(转)
最近在做使用GDI+绘制K线界面发现传统的GDI+绘制方式效率比较低,根本无法满足K线界面及时刷新的速度要求. 所以做了个GDI+绘制图形界面的试验,改试验主要在一个600×600的区域内每隔10MS ...
- GDI+编程说明及小结
原文地址:http://blog.csdn.net/byxdaz/article/details/5972759 GDI+(Graphics Device Interface Plus图形设备接口加) ...
- cimage和gdi绘图效率比较_GDI+和GDI绘图性能对比实验
龙源期刊网 http://www.qikan.com.cn GDI+ 和 GDI 绘图性能对比实验 作者:王克茹 来源:<科技创新与应用> 2013 年第 25 期 摘 要:本文通过完全相 ...
- GDI+ 使用指南(basic guiding of GDI plus )
其实这个也没有什么用,毕竟已经是过时的技术了.不过技术的更新跟实际的使用还是有差距了,免不了还是要用这种过时的技术,所以还是记录下来,方便以后查阅. GDI+没记错的话是跟随XP诞生的,是XP系统上的 ...
- Chapter 3.GDI/DirectDraw Internal Data Structures
说明,在这里决定跳过第二章,实在是因为里面涉及的内容太理论,对我而言又太艰深 3.1 HANDLES AND OBJECT-ORIRNTED PROGRAMMING In normal object- ...
- C# WinForm开发系列 - GDI+【转】
http://blog.csdn.net/blue_sky6/article/details/53811435?locationNum=6&fps=1 C# WinForm开发系列 - GDI ...
- GDI对象泄漏检查的一点经验
程序出现GDI泄漏,在GDIndicator中,Total字段的两个值不一致的情况,前面比后面大了很多,一直没有找到为何,以为是没释放就会导致不一致: 查看了程序代码,一直无法找到泄漏的地方,于是找各 ...
最新文章
- python简单代码演示效果-用python画爱心及代码演示
- 已解决:k8s集群启动后,默认创建哪些namespace?
- Oracle connet by prior 关键字的简单介绍和用法
- js变量提升_学习笔记:JS中的作用域和预解析
- new Date()时间
- cmd命令大全/cmd命令提示符大全
- 代码生成利器-NCodeGenerate 教程(2) NCodeGenerate的代码公用之一
- mysql 多表并列查询_Mysql多表查询(两张独立表,一张关系表)
- php函数copy和rename的区别
- 借助Intent实现Android工程中Activity之间Java对象的传递——实现Serializable接口
- python 桌面数据库_python数据库操作笔记
- testbed代码审查信息提取
- php util,PHP中文工具类ChineseUtil怎样转换汉字与拼音
- 原生android 操作系统,为什么氢OS被称为最接近原生安卓的操作系统?
- zookeeper基础知识以及常用命令
- Winserver2016安装Exchange2016总结(一堆坑)
- NetworkX学习笔记07:泊松分布与幂律分布
- 风格迁移1-02:Liquid Warping GAN(Impersonator)-源码模型测试-报错解决
- 阿里网盘内测 你申请了吗? 阿里网盘内测资格
- lin总线可以控制几个节点_[LIN].LIN总线详解
热门文章
- 用BufferedImage和Graphics实现简单鼠标手绘画板(Java)
- 写基于stm32智能家居控制系统设计论文
- pythondjangoddos_django 服务器选择
- linux下bin安装包制作
- 输入三角形的三条边长,判断其是否能构成三角形,并计算其面积。
- 高精度电流源如何设计出来?
- layDate开始时间和结束时间
- RFID物流仓储应用解决方案-铨顺宏
- PIC18F系列单片机外部中断
- 英语口语练习十六之I was quite impressed by... (我对……的印象很深刻)的用法