GDIGDI 从入门到精通-第三讲资料
- 格式:ppt
- 大小:677.01 KB
- 文档页数:55
上海鼎为通讯科技有限公司 上海鼎为通讯科技有限公司 鼎为通讯科技 Dewav Communication Technology Co.,Ltd.GDI 学习总结文件编号 Doc. No. : 页数 Page : 12 报告人:Neil 版本 Version :V1.0上海鼎为通讯科技有限公司1历次修正记录序号 1 变更 日期 2010-10-1 1 原因创建文档变更摘要版本1.0提出者Neil批准2目 录1 GDI 简介 ....................................................................................................................................... 4 2 GDI 功能描述和架构分析............................................................................................................ 4 3 2D APIs 和文本功能 ..................................................................................................................... 6 3.1 点........................................................................................................................................ 6 3.2 线........................................................................................................................................ 6 3.3 框........................................................................................................................................ 6 3.4 文本.................................................................................................................................... 7 3.4.1 字体.......................................................................................................................... 7 3.4.2 带边框的文本 ......................................................................................................... 7 4 层 .................................................................................................................................................. 7 4.1 准备.................................................................................................................................... 8 4.2 创建层................................................................................................................................ 8 4.3 激活层................................................................................................................................ 9 4.4 基础层.............................................................................................................................. 10 4.5 合并层.............................................................................................................................. 11 4.6 层坐标系.......................................................................................................................... 11 4.7 剪切.................................................................................................................................. 12 4.8 透明度............................................................................................................................... 12 4.9 通透.................................................................................................................................. 12 4.10 图像旋转........................................................................................................................ 13 5 流程跟踪..................................................................................................................................... 15 6 参考文档..................................................................................................................................... 1531 GDI 简介GDI 是 Graphics Device Interface 的缩写,含义是图形设备接口,它的主 要任务是负责系统与绘图程序之间的信息交换, 处理所有 Windows 程序的图形输 出。
C#.net地图控件开发(五)GDI+图形图像编程基础3.画刷和画刷类型Brush类型是一个抽象类,所以它不能被实例化,也就是不能直接应用,但是我们可以利用它的派生类,如:HatchBrush、SolidBrush、T extureBrush、LinearGradientBrush和PathGradientBrush等。
画刷类型一般在System.Drawing命名空间中,如果应用HatchBrush和GradientBrush画刷,需要在程序中引入System.Drawing.Drawing2D命名空间。
1. SolidBrush(单色画刷)它是一种一般的画刷,通常只用一种颜色去填充GDI+图形,例如:protected override void OnPaint(PaintEventArgs e){Graphics g = e.Graphics;SolidBrush sdBrush1 = new SolidBrush(Color.Red);SolidBrush sdBrush2 = new SolidBrush(Color.Green);SolidBrush sdBrush3 = new SolidBrush(Color.Blue);g.FillEllipse(sdBrush2, 20, 40, 60, 70);Rectangle rect = new Rectangle(0, 0, 200, 100);g.FillPie(sdBrush3, 0, 0, 200, 40, 0.0f, 30.0f );PointF point1 = new PointF(50.0f, 250.0f);PointF point2 = new PointF(100.0f, 25.0f);PointF point3 = new PointF(150.0f, 40.0f);PointF point4 = new PointF(250.0f, 50.0f);PointF point5 = new PointF(300.0f, 100.0f);PointF[] curvePoints = {point1, point2, point3, point4,point5 };g.FillPolygon(sdBrush1, curvePoints);}2. HatchBrush(阴影画刷)HatchBrush类位于System.Drawing.Drawing2D命名空间中。
第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+ 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)。
Windows Gdi 应用-入门篇(VC SDK)一、基础GDI的绘图函数基本上都是有状态的,所有的函数都要求一个HDC类型的句柄。
这个HDC的获得有几个途径BeginPaint,GetWindowDC, GetDC.他们的参数都只需要一个HWND就差不多了。
记得调用了BeginPaint后要调用EndPaint 进行清理,调用GetWindowDC和GetDC后要调ReleaseDC进行清理。
在MFC 代码中常常遇到的CDC CPaintDC CWindowDC CClientDC。
在这里稍作解释。
CDC :例如用GDI画矩形要Rectangle(hDC,...),而使用CDC则是dc.Rectan gle(...),由此可见CDC主要是把原本需要HDC作为参数的GDI函数封装了一下,HDC成了它的一个成员变量。
CPaintDC CWindowDC CClientDC:他们都是从CDC继承,分别是对上面所说的BeginPaint,GetWindowDC, GetDC调用对进行封装(CPaintDC构造时调用B eginPaint,析构时调用EndPaint,其余同理)。
BeginPaint:一般用在对WM_PAINT的响应函数中使用GetWindowDC:可获得整个Window的HDC,而GetDC仅能获得客户区的H DC,区别就在于--前者有效地绘制区域是整个窗口(边框、标题栏、客户区的总和)。
后者有效地绘制区域仅限于客户区。
两者的坐标系都是相对坐标而非屏幕坐标,原点是(0,0)。
即以自己可绘制区域的左上角作为原点。
这里可以顺带的讲讲RECT了,RECT是一个结构,依次有4个成员left,top,right,bottom用来代表一个矩形区域。
CRect从RECT继承,提供了一些常用的操作(例如说位移,缩小等等),其实就是改变4个成员的值。
完全不用CRect也可以。
许多GDI函数都要求一个RECT作为参数,或者类似的用(x,y,cx,cy)作参数,其实也就是一个RECT变种,用了宽度和高度罢了。
Windows编程基础1本课程旨在向学员介绍:1掌握GDI基础应用2掌握框架应用程序开发过程3深入透彻理解框架应用程序时间:学时6教学方法:讲授+课上练习+课下作业第七章GDI基础及框架应用程序解析23从需求开始•编写一个单文档应用程序,程序运行后界面显示:”这是一个单文档应用程序!”.4三种典型的Visual C ++应用程序•使用AppWizard 创建项目时可以选择三种类型的应用界面即单文档、多文档和基于对话框的应用程序。
–单文档程序一次只能打开一个文件或文档,如记事本程序。
–多文档程序一次可以打开多个文档,如word 程序。
•使用AppWizard 创建单文档和多文档程序几乎一样,差别在于:–在创建SDI 界面的应用程序时,生成CMainFrame 类,CMainFrame 类的基类为CFrameWnd –在创建MDI 界面的应用程序时,CMainFrame 类的基类为CMDIFrameWnd ,生成CMDIChildWnd 类5•每次当视窗需要被重新绘制时,应用程序框架就要调用OnDraw 函数。
•驱使程序调用OnDraw 的两个途径:–用户改变窗口的尺寸;窗口恢复先前被遮盖的部分;应用程序改变了窗口数据;–程序中调用Invalidate (或者InvalidateRect ,通知Windows 调用OnDraw 函数OnDraw 成员函数•MFC中有许多类,但只有少数几个核心的类会对应用程序的基本框架产生影响,它们分别是–CWinApp–CDocument–CView–CFrameWnd–CDocTemplate•这5个类构成了大部分MFC文档/视图框架应用程序的核心,6•MFC并不是直接利用这些类生成框架,而是使用他们的派生类。
–基类派生类–CWinApp CHelloApp–CFrameWnd CMainFrame–CDocument CHelloDoc–CView CHelloView•使用派生类优点–继承基类功能–继承了框架–方便增加新功能78应用程序类和框架窗口类•应用程序类(CWinApp : 用MFC 编写的程序中唯一必不可少的类就是CWinApp ,它控制程序的流程。
GDI编程基础GDI(Graphics Device Interface,图形设备接口)是在Windows平台上处理图形、图像的方法,它是一套API函数;它们功能丰富,使用起来简单、灵活。
下面,我们首先来介绍一些GDI编程的基础知识。
GDI函数有很多,我们大致可以把它们分成如下几类:· 设备上下文(Device Context,简称DC)函数,如GetDC、CreateDC、DeleteDC等;· 画线函数,如LineTo、Polyline、Arc等;· 填充画图函数,如Ellipse、FillRect、Pie等;· 画图属性函数,如SetBkColor、SetBkMode、SetTextColor等;· 文本、字体函数,如TextOut、GetTextExtentPoint32、GetFontData等;· 位图函数,如SetPixel、BitBlt、StretchBlt等;· 坐标函数,如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen等;· 映射函数,如SetMapMode、SetWindowExtEx、SetViewportExtEx等;· 元文件(MetaFile)函数,如PlayMetaFile、SetWinMetaFileBits等;· 区域(Region)函数,如FillRgn、FrameRgn、InvertRgn等;· 路径(Path)函数,如BeginPath、EndPath、StrokeAndFillPath等;· 裁剪(Clipping)函数,如SelectClipRgn、SelectClipPath等。
上述这些函数可以完成绘制用户界面中的各个部分,包括我们在Windows平台上司空见惯的窗口、菜单、工具条、按钮等。
第7章C#图形图像编程基础本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础、C#图像处理基础以及简单的图像处理技术。
7.1 GDI+绘图基础编写图形程序时需要使用GDI(Graphics Device Interface,图形设备接口),从程序设计的角度看,GDI包括两部分:一部分是GDI对象,另一部分是GDI函数。
GDI 对象定义了GDI函数使用的工具和环境变量,而GDI函数使用GDI对象绘制各种图形,在C#中,进行图形程序编写时用到的是GDI+(Graphice Device Interface Plus图形设备接口)版本,GDI+是GDI的进一步扩展,它使我们编程更加方便。
7.1.1GDI+概述GDI+是微软在Windows 2000以后操作系统中提供的新的图形设备接口,其通过一套部署为托管代码的类来展现,这套类被称为GDI+的“托管类接口”,GDI+主要提供了以下三类服务:(1) 二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类。
(2) 图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。
因此,GDI+为我们提供了Bitmap、Image等类,它们可用于显示、操作和保存BMP、JPG、GIF等图像格式。
(3) 文字显示:GDI+支持使用各种字体、字号和样式来显示文本。
我们要进行图形编程,就必须先讲解Graphics类,同时我们还必须掌握Pen、Brush 和Rectangle这几种类。
GDI+比GDI优越主要表现在两个方面:第(一)GDI+通过提供新功能(例如:渐变画笔和alpha混合)扩展了GDI的功能;第(二)修订了编程模型,使图形编程更加简易灵活。
7.1.2Graphics类Graphics类封装一个GDI+绘图图面,提供将对象绘制到显示设备的方法,Graphics 与特定的设备上下文关联。