没有合适的资源?快使用搜索试试~ 我知道了~
GDI是位于应用程序与不同硬件之间的中间层,这种结构让程序员从直接处理不同硬件的工作中解放出来,把硬件间的差异交给了GDI处理。...
3星 · 超过75%的资源 需积分: 10 19 下载量 18 浏览量
2009-02-10
11:24:04
上传
评论
收藏 232KB PDF 举报
温馨提示
试读
20页
GDI是位于应用程序与不同硬件之间的中间层,这种结构让程序员从直接处理不同硬件的工作中解放出来,把硬件间的差异交给了GDI处理。GDI通过将应用程序与不同输出设备特性相隔离,使Windows应用程序能够毫无障碍地在Windows支持的任何图形输出设备上运行。例如,我们可以在不改变程序的前提下,让能在Epson点式打印机上工作的程序也能在激光打印机上工作。它把windows系统中的图形输出转换成硬件命令然后发送给硬件设备。GDI是以文件的形式存储在系统中,系统需要输出图形时把它载入内存,如果转换成硬件命令时遇到非GDI命令,系统还可能载入硬件驱动程序,驱动程序辅助GDI把图形命令转换成硬件命令。
资源推荐
资源详情
资源评论
GDI+入门
1 of 20
GDI+入门
GDI+参考 .........................................................................................................................................1
GDI 与 GDI+编程基础...............................................................................................................1
一、 GDI.....................................................................................................................1
二、 设备环境...........................................................................................................2
三、 GDI+...................................................................................................................2
四、 编程模式的变化...............................................................................................2
五、 GDI+新特色.......................................................................................................3
六、 VC.net 中使用 GDI+的方法.............................................................................4
GDI Bitmap 和 Device-Independent Bitmap 操作 ..............................................................7
一、 DIB(Device-Independent Bitmap,设备无关位图)小知识 .......................7
二、 BMP 文件的结构................................................................................................7
三、 位图文件结构概观分析:...............................................................................8
四、 位图文件结构详细分析:...............................................................................9
五、 位图读写 DEMO 代码.......................................................................................12
GDI 显示 GID 动画..................................................................................................................18
GDI 与 GDI+编程基础
一、 GDI
GDI 是位于应用程序与不同硬件之间的中间层,这种结构让程序员从直接处
理不同硬件的工作中解放出来,把硬件间的差异交给了 GDI 处理。GDI 通过将应
用程序与不同输出设备特性相隔离,使 Windows 应用程序能够毫无障碍地在
Windows 支持的任何图形输出设备上运行。例如,我们可以在不改变程序的前提
下,让能在 Epson 点式打印机上工作的程序也能在激光打印机上工作。它把
windows 系统中的图形输出转换成硬件命令然后发送给硬件设备。GDI 是以文件
的形式存储在系统中,系统需要输出图形时把它载入内存,如果转换成硬件命令
时遇到非 GDI 命令,系统还可能载入硬件驱动程序,驱动程序辅助 GDI 把图形命
令转换成硬件命令。
GDI+入门
2 of 20
二、 设备环境
Windows 系统是用来给应用程序提供设备独立性的工具,它是 windows 系统
为了处理输出设备而使用的一种内部数据结构,设备环境是 windos 程序,驱动
程序,和输出设备(如打印机,绘图仪)之间的纽带,GDI 是一组 C++类,它在驱
动程序的协助下把数据描绘在硬件上,它位于应用程序与硬件之间,把数据从一
方传到另一方。在 Visual Studio .NET 中 Micro$oft 解决了 GDI 中的许多问题,
并让它变得易用,GDI 的.net 版本叫做 GDI+。
三、 GDI+
GDI+是 GDI 的下一个版本,它进行了很好的改进,并且易用性更好。GDI 的
一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实
现了这个优点,也就是说,GDI 是一个中低层 API,你还可能要知道设备,而 GDI+
是一个高层的 API,你不必知道设备。例如你如果要设置某个控件的前景和背景
色,只需设置 BackColor 和 ForeColor 属性。
四、 编程模式的变化
“GDI uses a stateful model, whereas GDI+ uses a stateless”——GDI
是有状态的,GDI+是无状态的。
1、不再使用设备环境或句柄
在使用 GDI 绘图时,必须要指定一个设备环境(DC),用来将某个窗口或设备
与设备环境类的句柄指针关联起来,所有的绘图操作都与该句柄有关。而 GDI+
不再使用这个设备环境或句柄,取而代之是使用 Graphics 对象。与设备环境相
类似,Graphics 对象也是将屏幕的某一个窗口与之相关联,并包含绘图操作所
需要的相关属性。但是,只有这个 Graphics 对象与设备环境句柄还存在着联系,
其余的如 Pen、Brush、Image 和 Font 等对象均不再使用设备环境。
2、Pen、Brush,Font,Image 等对象是图形对象独立的
画笔对象能与用于提供绘制方法的图形对象分开创建于维护,Graphics 绘
图方法直接将 Pen 对象作为自己的参数,从而避免了在 GDI 使用 SelectObject
进行繁琐的切换,类似的还有 Brush、Path、Image 和 Font 等。
GDI+入门
3 of 20
3、“当前位置”
GDI 绘图操作(如画线)中总存在一个被称为"当前位置"的特殊位置。每次画
线都是以此当前位置为起始点,画线操作结束之后,直线的结束点位置又成为了
当前位置。设置当前位置的理由是为了提高画线操作的效率,因为在一些场合下,
总是一条直线连着另一条直线,首尾相接。有了当前位置的自动更新,就可避免
每次画线时都要给出两点的坐标。尽管有其必要性,但是单独绘制一条直线的场
合总是比较多的,因此 GDI+取消这个"当前位置"以避免当无法确定"当前位置"
时所造成的绘图的差错,取而代之的是直接在 DrawLine 中指定直线起止点的坐
标。
4、绘制和填充
GDI 总是让形状轮廓绘制和填充使用同一个绘图函数,例如 Rectangle。轮
廓绘制需要一个画笔,而填充一个区域需要一个画刷。也就是说,不管我们是否
需要填充所绘制的形状,我们都需要指定一个画刷,否则 GDI 采用默认的画刷进
行填充。这种方式确实给我们带来了许多不便,现在 GDI+将形状轮廓绘制和填
充操作分开而采用不同的方法,例如 DrawRectangle 和 FillRectangle 分别用来
绘制和填充一个矩形。
5、区域的操作
GDI 提供了许多区域创建函数,如:CreateRectRgn、CreateEllpticRgn、
CreateRoundRectRgn、CreatePolygonRgn 和 CreatePolyPolygonRgn 等。诚然,
这些函数给我们带来了许多方便。但在 GDI+中,由于为了便于将区域引入矩阵
变换操作,GDI+简化一般区域创建的方法,而将更复杂的区域创建交由 Path 接
管。由于 Path 对象是与设备环境分离开来的,因而可以直接在 Region 构造函数
中加以指定。
五、 GDI+新特色
GDI+与 GDI 相比,增加了下列新的特性:
1、渐变画刷
以往 GDI 实现颜色渐变区域的方法是通过使用不同颜色的线条来填充一个
裁剪区域而达到的。现在 GDI+拓展了 GDI 功能,提供线型渐变和路径渐变画刷
来填充一个图形、路径和区域,甚至也可用来绘制直线、曲线等。这里的路径可
以视为由各种绘图函数产生的轨迹。
2、样条曲线
对于曲线而言,最具实际意义的莫过于样条曲线。样条曲线是在生产实践的
基础上产生和发展起来的。模线间的设计人员在绘制模线时,先按给定的数据将
型值点准确地"点"到图板上。然后,采用一种称为"样条"的工具(一根富有弹性
的有机玻璃条或木条),用压铁强迫它通过这些型值点,再适当调整这些压铁,
让样条的形态发生变化,直至取得合适的形状,才沿着样条画出所需的曲线。如
GDI+入门
4 of 20
果我们把样条看成弹性细梁,那么压铁就可看成作用在这梁上的某些点上的集中
力。GDI+的 Graphics:: DrawCurve 函数中就有一个这样的参数用来调整集中力
的大小。除了样条曲线外,GDI+还支持原来 GDI 中的 Bezier 曲线。
3、独立的路径对象
在 GDI 中,路径是隶属于一个设备环境(上下文),也就是说一旦设备环境指
针超过它的有效期,路径也会被删除。而 GDI+是使用 Graphics 对象来进行绘图
操作,并将路径操作从 Graphics 对象分离出来,提供一个 GraphicsPath 类供用
户使用。这就是说,我们不必担心路径对象会受到 Graphics 对象操作的影响,
从而可以使用同一个路径对象进行多次的路径绘制操作。
4、矩阵和矩阵变换
在图形处理过程中常需要对其几何信息进行变换以便产生复杂的新图形,矩
阵是这种图形几何变换最常用的方法。为了满足人们对图形变换的需求,GDI+
提供了功能强大的 Matrix 类来实现矩阵的旋转、错切、平移、比例等变换操作,
并且 GDI+还支持 Graphics 图形和区域(Region)的矩阵变换。
5、Alpha 通道合成运算
在图像处理中,Alpha 用来衡量一个像素或图像的透明度。在非压缩的 32
位 RGB 图像中,每个像素是由四个部分组成:一个 Alpha 通道和三个颜色分量(R、
G 和 B)。当 Alpha 值为 0 时,该像素是完全透明的,而当 Alpha 值为 255 时,则
该像素是完全不透明。
Alpha 混色是将源像素和背景像素的颜色进行混合,最终显示的颜色取决于
其 RGB 颜色分量和 Alpha 值。它们之间的关系可用下列公式来表示
显示颜色 = 源像素颜色 X alpha / 255 + 背景颜色 X (255 - alpha) / 255
GDI+的 Color 类定义了 ARGB 颜色数据类型,从而可以通过调整 Alpha 值来改变
线条、图像等与背景色混合后的实际效果。
6、多图片格式的支持
GDI+提供了对各种图片的打开,存储功能。通过 GDI+,我们能够直接将一
幅 BMP 文件存储成 JPG 或其它格式的图片文件。
除了上述新特性外,GDI+还将支持重新着色、色彩修正、消除走样、元数据
以及 Graphics 容器等特性。
六、 VC.net 中使用 GDI+的方法
在 Visual C++.NET 使用 GDI+一般遵循下列步骤:
(1)、在应用程序中添加 GDI+的包含文件 gdiplus.h 以及附加的类库
gdiplus.lib。通常 gdiplus.h 包含文件添加在应用程序的 stdafx.h 文件中,而
gdiplus.lib 可用两种进行添加:第一种是直接在 stdafx.h 文件中添加下列语
句:
#pragma comment( lib, "gdiplus.lib" )
剩余19页未读,继续阅读
资源评论
- icyblue0012012-02-07请注意是GDI+的入门教程,是pdf格式的。下之前看清楚啊
Rodgester
- 粉丝: 3
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- tensorflow-rocm-2.13.1.600-cp39-cp39-manylinux2014-x86-64.whl
- tensorflow-gpu-2.7.0-cp39-cp39-manylinux2010-x86-64.whl
- tensorflow-gpu-2.7.0-cp38-cp38-manylinux2010-x86-64.whl
- 电子科大 电路分析与模拟电路 实验报告.pdf
- 各位大佬哥哥可以帮我看一下吗
- image-gradients.zip
- 5G频点频率计算方法.xlsx
- python 企业编码管理 计算机毕业设计.zip
- vue-基于vue2+vuex+axios实现的天气预报小项目.zip
- wyxnxhw.apk
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功