第9章 GDI+与图形编程
- 格式:ppt
- 大小:416.00 KB
- 文档页数:19
一、GDIGDI是位于应用程序与不同硬件之间的中间层,这种结构让程序员从直接处理不同硬件的工作中解放出来,把硬件间的差异交给了GDI处理。
GDI通过将应用程序与不同输出设备特性相隔离,使Windows 应用程序能够毫无障碍地在Windows支持的任何图形输出设备上运行。
例如,我们可以在不改变程序的前提下,让能在Epson点式打印机上工作的程序也能在激光打印机上工作。
它把windows系统中的图形输出转换成硬件命令然后发送给硬件设备。
GDI是以文件的形式存储在系统中,系统需要输出图形时把它载入内存,如果转换成硬件命令时遇到非GDI命令,系统还可能载入硬件驱动程序,驱动程序辅助GDI把图形命令转换成硬件命令。
二、设备环境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+程序设计GDI+是图形设备接口的一个版本,用于在Windows操作系统上提供图形绘制功能。
它是.NET Framework的一部分,为开发人员提供了一套丰富的类和方法,用于绘制2D图形、图像和文本。
下面是一个简单的GDI+程序设计示例,该示例在窗体上绘制一个红色的矩形:```csharpusing System;using System.Drawing;using System.Windows.Forms;public class GdiPlusApp:Form{public GdiPlusApp(){this.Paint+=new PaintEventHandler(GdiPlusApp_Paint);}void GdiPlusApp_Paint(object sender, PaintEventArgs e){Graphics g=e.Graphics;Rectangle rect=new Rectangle(10,10, 200,100);SolidBrush brush=new SolidBrush(Color.Red);g.FillRectangle(brush,rect);g.DrawRectangle(Pens.Black,rect);}[STAThread]static void Main(){Application.Run(new GdiPlusApp());}}```在这个示例中,我们创建了一个继承自`Form`的`GdiPlusApp`类。
在`GdiPlusApp`的构造函数中,我们添加了一个`Paint`事件处理器`GdiPlusApp_Paint`。
当窗体需要重新绘制时,就会触发这个事件。
在`GdiPlusApp_Paint`方法中,我们创建了一个`Graphics`对象,然后使用`SolidBrush`和`Pens`类来绘制一个红色的矩形和一个黑色的边框。
最后,我们在`Main`方法中创建了`GdiPlusApp`的实例并启动了应用程序。
GDI+ SDK参考(翻译版本)序言.............................................................................................................................................- 4 - 目标.....................................................................................................................................- 4 - 适用范围.............................................................................................................................- 4 - 适用读者.............................................................................................................................- 4 - 运行环境.............................................................................................................................- 4 - 文档组织.............................................................................................................................- 4 - 相关主题.............................................................................................................................- 4 - GDI+的安全考虑........................................................................................................................- 6 - 检验构造函数调用成功与否..............................................................................................- 6 - 分配缓冲区.........................................................................................................................- 6 - 错误校验.............................................................................................................................- 7 - 线程同步.............................................................................................................................- 9 - 相关主题...........................................................................................................................- 10 - 关于GDI+.................................................................................................................................- 11 - GDI+ 介绍........................................................................................................................- 11 - GDI+ 概览..............................................................................................................- 11 -GDI+ 的三个组成部分..........................................................................................- 11 -基于类的接口架构....................................................................................................- 12 - GDI+提供了哪些新东西?..............................................................................................- 12 - 新特征.......................................................................................................................- 12 -编程模式的改变........................................................................................................- 15 - 线条、曲线和图形...........................................................................................................- 19 - 矢量图概览...............................................................................................................- 19 -钢笔、线条和矩形....................................................................................................- 20 -椭圆和弧...................................................................................................................- 22 -多边形.......................................................................................................................- 22 -基数样条...................................................................................................................- 23 -贝塞尔样条...............................................................................................................- 24 -路径...........................................................................................................................- 25 -画刷和填充图形........................................................................................................- 27 -开放与闭合曲线........................................................................................................- 29 -区域...........................................................................................................................- 30 -裁剪...........................................................................................................................- 31 -路径平直化...............................................................................................................- 32 -线条和曲线的抗锯齿功能........................................................................................- 32 - 图象、位图和图元文件....................................................................................................- 33 - 位图类型...................................................................................................................- 34 -图元文件...................................................................................................................- 37 -绘制、定位和复制图片............................................................................................- 39 -裁剪和缩放图象........................................................................................................- 40 - 坐标系统和转换...............................................................................................................- 42 - 坐标系统类型............................................................................................................- 42 -以矩阵来表示转换....................................................................................................- 44 -全局和局部转换........................................................................................................- 48 - 图形容器...........................................................................................................................- 51 - 使用GDI+.................................................................................................................................- 56 - 使用入门...........................................................................................................................- 56 - 绘制线条...................................................................................................................- 56 -绘制字符串...............................................................................................................- 58 - 使用钢笔绘制线条和形状................................................................................................- 59 - 使用钢笔绘制线条和矩形........................................................................................- 59 -设置钢笔的宽度和对齐方式....................................................................................- 60 -绘制具有线帽的线条................................................................................................- 61 -联接线条...................................................................................................................- 62 -绘制自定义虚线........................................................................................................- 62 -绘制用纹理填充的线条............................................................................................- 63 - 使用画笔填充形状...........................................................................................................- 63 - 用纯色填充形状........................................................................................................- 64 -用阴影图案填充形状................................................................................................- 64 -用图像纹理填充形状................................................................................................- 64 -在形状中平铺图像....................................................................................................- 65 -用渐变色填充形状....................................................................................................- 68 - 使用图像、位图和图元文件............................................................................................- 68 - 加载和显示位图........................................................................................................- 68 -加载和显示图元文件................................................................................................- 69 -记录图元文件............................................................................................................- 69 -剪裁和缩放图像........................................................................................................- 71 -旋转、反射和扭曲图像............................................................................................- 72 -缩放时使用插值模式控制图像质量........................................................................- 73 -创建缩略图像............................................................................................................- 75 -采用高速缓存位图来提高性能................................................................................- 76 -通过避免自动缩放改善性能....................................................................................- 76 -读取图像元数据........................................................................................................- 77 - 使用图像编码器和解码器................................................................................................- 83 - 列出已安装的编码器................................................................................................- 83 -列出已安装的解码器................................................................................................- 84 -获取解码器的类标识符............................................................................................- 86 -获取编码器的参数列表............................................................................................- 88 -将BMP图像转换为PNG图像.............................................................................- 100 -设定JPEG的压缩等级..........................................................................................- 101 -对JPEG图像进行无损变换..................................................................................- 102 -创建和保存多帧图像..............................................................................................- 105 -从多帧图像中复制单帧..........................................................................................- 107 - Alpha 混合线条和填充..................................................................................................- 109 - 绘制不透明和半透明的线条..................................................................................- 109 -用不透明和半透明的画笔绘制..............................................................................- 110 -使用复合模式控制Alpha 混合...........................................................................- 111 -使用颜色矩阵设置图像中的Alpha 值..............................................................- 112 -设置单个象素的alpha值.....................................................................................- 114 - 使用字体和文本.............................................................................................................- 115 - 构造字体系列和字体..............................................................................................- 115 -绘制文本.................................................................................................................- 116 -格式化文本.............................................................................................................- 117 -枚举已安装的字体..................................................................................................- 120 -创建专用的字体集合..............................................................................................- 122 -获取字体规格..........................................................................................................- 126 -对文本使用消除锯齿效果......................................................................................- 130 - 构造并绘制曲线.............................................................................................................- 131 - 绘制基数样条曲线..................................................................................................- 131 -绘制贝塞尔样条......................................................................................................- 133 - 用渐变画刷填充形状.....................................................................................................- 134 - 创建线性渐变..........................................................................................................- 134 -创建路径渐变..........................................................................................................- 137 -将Gamma 校正应用于渐变..............................................................................- 144 - 构造并绘制路径.............................................................................................................- 145 - 使用线条、曲线和形状创建图形..........................................................................- 145 -填充开放式图形......................................................................................................- 147 - 使用图形容器.................................................................................................................- 147 - 管理Graphics 对象的状态................................................................................- 148 -使用嵌套的Graphics 容器................................................................................- 151 - 变换.................................................................................................................................- 154 - 使用世界变换..........................................................................................................- 154 -为什么变换顺序非常重要......................................................................................- 155 - 使用区域.........................................................................................................................- 156 - 对区域使用点击检测..............................................................................................- 156 -对区域使用剪辑......................................................................................................- 157 - 对图像重新着色.............................................................................................................- 158 - 使用颜色矩阵对单色进行变换..............................................................................- 158 -转换图像颜色..........................................................................................................- 160 -缩放颜色.................................................................................................................- 161 -旋转颜色.................................................................................................................- 164 -剪取颜色.................................................................................................................- 166 -使用颜色重映射表..................................................................................................- 168 - 打印.................................................................................................................................- 169 - 将GDI+输出至打印机.........................................................................................- 169 -显示一个打印对话框..............................................................................................- 172 -通过提供打印机句柄优化打印..............................................................................- 173 - 附录:GDI+ 参考..................................................................................................................- 176 -序言目标Microsoft Windows GDI+是为C/C++开发者提供的一个基于类的应用程序编程接口(API)。
第5章 GDI+GDI+(Graphics Device Interface Plus 图形设备接口加)是Windows XP 和Windows Server 2003操作系统的图形子系统,也是.NET 框架的重要组成部分和窗体绘图的主要工具,负责在屏幕和打印机上绘制图形图像和显示信息。
顾名思义,GDI+是Windows 早期版本所提供的图形设备接口GDI 的后续版本。
GDI+是一种应用程序编程接口(API),分别通过一套C++类和一套部署为托管代码的类来展现,这两套类分别被称为GDI+的“C++封装”和“托管类接口”。
GDI+不但在功能上比GDI 要强大很多,而且在代码编写方面也更简单,因此会很快成为Windows 图形图像程序开发的主要工具。
本章将介绍GDI+的特点和新增功能,以及GDI+ API 的具体使用方法,包括二维矢量图形的绘制、图像处理的应用、以及文字的显示等。
由于本章内容较多,有些章节不作为基本要求,用*号表示的章节是可选的。
5.1 概述GDI+与GDI 一样,都具有设备无关性。
而且GDI+是建立在GDI 之上的一种高层接口,供Windows 应用程序和.NET 框架调用。
参见下图:GDI+的体系结构本节首先介绍GDI+的几个主要新增的特性及其功能,然后说明它给Windows 图形图像程序的开发模式带来的变化,最后给出一个代码实例,介绍如何在VC++中使用GDI+进行程序开发。
1.GDI+的功能GDI+主要提供了以下三种功能:1)二维矢量图形与MFC中代表GDI的CDC和CGDIObject的诸派生类(CPen、CBrush、CFont等)类似,GDI+的Graphics等类也提供绘制各种二维矢量图形(如直线、折线、矩形、椭圆、多边形等)的功能。
而且GDI+还增加了许多新的特性和功能,如无当前状态的绘图模式、含透明成分(α混色)的颜色类Color、图案笔、颜色可渐变的刷、贝塞尔和样条曲线、持久的路径、可伸缩的区域、功能强大的矩阵和变换等等。
易语言gdi函数易语言(EPL)是一种针对中国开发者设计的可visua l基础级别的编程语言。
它提供了一系列的GDI(图形设备接口)函数,用于在图形窗口中进行图形和界面的绘制。
以下是一些常用的易语言GDI 函数:1. 创建图形窗口:```eplWnd_Create(0, "窗口标题", 0, 0, 800, 600, 0)```这个函数用于创建一个窗口,指定窗口的标题、位置和大小。
2. 创建画布:```eplhdc = CreateDC(800, 600)```通过CreateDC 函数创建一个画布,指定宽度和高度。
3. 绘制文本:```eplTextOut(hdc, 100, 100, "Hello, World!", "宋体", 20, RGB(255, 0, 0))```使用TextOut 函数在指定位置绘制文本,指定字体、大小和颜色。
4. 绘制直线:```eplLine(hdc, 200, 200, 400, 400, RGB(0, 0, 255))```使用Line 函数绘制一条直线,指定起点和终点的坐标以及颜色。
5. 绘制矩形:```eplRectangle(hdc, 300, 300, 500, 500, RGB(0, 255, 0), RGB(255, 255, 0))```使用Rectangle 函数绘制一个矩形,指定左上角和右下角的坐标,以及边框和填充颜色。
6. 绘制圆形:```eplEllipse(hdc, 100, 100, 300, 300, RGB(255, 0, 255), RGB(0, 255, 255))```使用Ellipse 函数绘制一个圆形,指定左上角和右下角的坐标,以及边框和填充颜色。
这只是一小部分易语言中可用的GDI 函数。
根据实际需求,你可能需要查阅易语言的相关文档以获取更多详细的信息。
在易语言的开发环境中,你可以通过帮助文档或自动补全功能查看所有可用的GDI 函数和参数。
第8章 GDI编程1-绘图GDI(Graphics Device Interface,图形设备接口)是Windows操作系统的传统图形子系统,负责与设备无关的图形绘制,Win32 API为应用程序提供了丰富的绘图函数和功能,MFC对它们进行了C++类封装,参见图8-1。
图8-1 GDI与Windows操作系统(其中彩色部分为操作系统)于1985年11月推出的,新式GDI+则是随Windows XP于2001年10月推出的GDI的改进版,增加了α混色、渐变画刷、样条曲线、矩阵变换、图像处理、持久路径等新功能。
随Windows Vista及.NET框架于2006年11月又推出了基于DirectX和.NET框架的全新图形子系统WPF(Windows Presentation Foundation,视窗显示/展现基础),它统一了桌面和浏览器等客户端应用程序的图形界面,采用XAML声明式编程,将用户界面的设计和编程彻底分离开来,是Windows的下一代GUI显示系统。
本书从第8章到第11章,将详细讨论如何使用GDI进行传统的Windows图形编程,包括绘图、文字、图像、动画、图标、图元文件和打印等内容。
GDI+是建立在GDI之上的,计划在第14和15章中作简单介绍。
WPF则是以.NET框架为基础的,准备在第19上和20章中再加以讨论。
在MFC应用程序中,绘图一般在视图类的(屏幕/打印机)绘图消息响应函数OnDraw 中进行,例如:void CDrawView::OnDraw(CDC* /*pDC*/) {CDrawDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码}每次需要重绘窗口时(如程序启动、窗口大小改变、全部或部分窗口重现、程序员调用函数RedrawWindow 或Invalidate/UpdateWindow ),应用程序框架都会调用此CWnd 消息响应成员函数(的覆盖)来绘制窗口客户区。