第5章GDI+与图像处理.ppt_第1页
第5章GDI+与图像处理.ppt_第2页
第5章GDI+与图像处理.ppt_第3页
第5章GDI+与图像处理.ppt_第4页
第5章GDI+与图像处理.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windows程序设计 VisualC 版 WindowsProgrammingBasedonVisualC 江苏大学计算机学院曹汉清E Mail chq 第五章GDI 与图像处理 内容 5 1GDI 概述 5 2GDI 绘图基础 5 3GDI 字体和文本绘制 5 4GDI 图像处理 一 关于GDI 二 使用GDI 的一般方法 三 基本数据结构 5 1GDI 概述 GDI GraphicsDeviceInterface 是程序员编写与设备无关应用程序的基础 GDI 在GDI的基础上进行了改进 添加了很多新功能并优化了其原有功能 是WindowsXP操作系统中提供二维矢量图形 图像处理及字体格式化的部分 它由一组跟图形处理有关的托管类组成 是 NETFramework的组成部分 一 关于GDI GDI 核心命名空间 P232 System Drawing 提供GDI 基本图形功能 更为高级的功能在System Drawing Drawing2D System Drawing Imaging和System Drawing Text命名空间中提供 5 1GDI 概述 System Drawing Drawing2D 提供高级的二维图形处理功能和向量操作功能 System Drawing Imaging 提供高级的GDI 图像处理功能 System Drawing Printing 提供与打印相关的服务 通常情况下 可以创建PrintDocument类的实例 设置描述打印内容的属性 然后调用Print方法进行 System Drawing Text 提供高级的字体处理功能 用户可以创建和使用字体集合 一 关于GDI 5 1GDI 概述 System Drawing主要包含的类和结构 Bitmap 用于位图处理 Brush 用于区域填充 自己定义画刷格式 抽象基类 Brushes 采用标准颜色的画笔 Font 字体处理 可定义特定的文本格式 包括字体 字号和字形属性 Graphics 用于GDI 图形的绘制 Icon 表示Windows图标Image Bitmap和Metafile类的抽象基类 ImageAnimator 动画处理 包含基于时间帧的图像 Pen 画笔 自己定义画笔格式 Pens 使用标准颜色的画笔 5 1GDI 概述 一 关于GDI Region 封闭区域处理 可由矩形和由路径构成SolidBrush 定义单色画刷 StringFormat 设置文本格式 SystemBrushes 系统画刷SystemColors 系统颜色SystemFonts 系统字体SystemIcons 系统图标SystemPens 系统画笔TextureBrush 纹理画刷 使用图像来填充区域内部 5 1GDI 概述 一 关于GDI System Drawing包含的主要结构 CharacterRange 指定字符串内字符位置的范围 Color 表示ARGB颜色 Point 二维平面中的点 X和Y为整型 PointF 二维平面中的点 X和Y为单精度浮点型 Rectangle 矩形 参数为整型 RectangleF 矩形 参数为单精度浮点型 Size 尺寸 有宽度和高度 参数为整型型 SizeF 尺寸 有宽度和高度 参数为单精度浮点型 5 1GDI 概述 一 关于GDI 二 使用GDI 的一般方法 使用Paint事件 在Paint事件中 事件数据参数是通过PaintEventArgs类来传递的 该类有两个重要的属性 一个是ClipRectangle 用来获取在其中可以进行绘画的区域大小 另一个是Graphics 它是用于绘画的Graphics对象 该对象提供与窗体或控件相对应的一种绘图环境 重载OnPaint虚函数 protected virtualvoidOnPaint System Windows Forms PaintEventArgs e override 在此处添加自己的代码Form OnPaint e 一定要有 或在此处添加自己的代码 5 1GDI 概述 二 使用GDI 的一般方法 调用控件的CreateGraphics 成员函数 如在窗体中 Graphics gr this CreateGraphics 如果处理的是Image对象 还可以使用Graphics类的静态成员函数FromImage 它创建一个Graphics对象并与一个Image对象相关联 Bitmap hmap gcnewBitmap Graphics gr Graphics FromImage hmap 使用Graphics类的FromHwnd 静态成员函数 它为指定的窗口句柄返回新的Graphics Graphics gr Graphics FromHwnd this Handle 5 1GDI 概述 1 颜色用Color结构来表示 它表示一个ARGB颜色 其中A R G B均是Color结构的属性 分别表示alpha 红 绿 蓝分量值 它们都是Byte类型 值的范围为0 255 Color结构中包含许多预定义的颜色 它们使用静态属性来表示 需要通过类名来引用 如 Color Red表示红色等 除了预定义的颜色外 用户还可以调用Color的静态方法FromArgb来创建自定义颜色 该方法共有四种重载类型 在图形绘制操作中 常常需要使用Color Point Size和Rectangle等简单数据结构 它们都是值类型 三 基本数据结构 5 1GDI 概述 三 基本数据结构 2 点Point结构用来表示二维平面中定义的点或一个位置 x y 其属性有X和Y 分别表示点的水平坐标和垂直坐标 该结构的构造函数原型如下 Point int32dw Point Sizesz Point int32x int32y 其中 dw的低16位指定水平x坐标 高16位指定垂直y坐标 sz的宽度Width和高度Height用来指定Point的x和y的值 5 1GDI 概述 3 尺寸Size结构常用来表示一个尺寸的大小 其属性有Width和Height 该结构的构造函数原型如下 Size Pointpt Size int32width int32height 其中 pt的X和Y用来指定Size的Width和Height属性值 4 矩形Rectangle结构用来表示一个矩形的位置和大小 其属性有 Width 矩形水平宽度Height 矩形垂直高度X Y 矩形左上角的x y坐标 三 基本数据结构 5 1GDI 概述 4 矩形Location 矩形左上角的Point位置Left 矩形左边的x坐标Right 矩形右边的x坐标Top 矩形上边的y坐标Bottom 矩形下边的y坐标Rectangle的构造函数原型如下 Rectangle Pointlocation Sizesize Rectangle int32x int32y int32width int32height 其中 location或x y用来指定矩形左上角的位置 width和height分别指定矩形的宽度和高度 5 基本运算符操作Point Size和Rectangle重载了常用的运算符操作 如Point和Size结构的 操作 Rectangle结构的 操作等 5 1GDI 概述 5 2GDI 绘图基础 一 坐标空间及其相关属性 二 画笔 三 画刷 四 基本绘图函数 5 2GDI 绘图基础 1 世界坐标系 设备坐标系和页面坐标系世界坐标系 用户坐标系 是进行图形输入输出所使用的一种与设备无关的笛卡尔坐标系 默认时使用像素为单位设备坐标系 在显示 打印等设备上进行图形绘制时所使用的坐标系 度量单位为像素 左上角为原点 页面坐标系 进行图形绘制时所采用的坐标系 默认时使用像素为单位 左上角为原点 这时 设备坐标和页面坐标是一致的 一 坐标空间及其相关属性 5 2GDI 绘图基础 2 页面坐标属性的设置PageUnit属性用来设置和获取页坐标的度量单位 它通常可以有下列的GraphicsUnit枚举值 Display 将显示设备所采用的单位作为度量单位 通常 视频显示使用的单位是像素 打印机使用的单位是1 100英寸 Pixel 以像素为度量单位 Point 将打印机点 1 72英寸 指定为度量单位 Inch 将英寸指定为度量单位 Document 将文档单位 1 300英寸 指定为度量单位 Millimeter 将毫米指定为度量单位 World 将世界坐标系单位指定为度量单位 一 坐标空间及其相关属性 5 2GDI 绘图基础 2 页面坐标属性的设置PageScale属性用来获取或设置相对于页面坐标的绘图比例 原点位置设置 TranslateTransform 一 坐标空间及其相关属性 二 画笔 P234 1 使用Pen创建画笔使用构造函数 4个 进行 Pen pPen gcnewPen Color Red 创建一红色画笔Pen pPen gcnewPen Color Blue 4 蓝色 宽为4的画笔画笔也可直接用画刷来创建 5 2GDI 绘图基础 二 画笔 2 画笔属性Width属性用来设置或获取线宽的 DashStyle用来获取或设置指定线型表8 4StartCap和EndCap用来获取或设置直线的首末两端的线帽类型 表8 2 LineJoin获取或设置连续两条直线连接处的连接头样式3 自定义画笔如果DashStyle中定义的线型不能满足实际需求 可通过Pen类的DashPattern属性来设置 这时须将DashStyle属性设置为DashStyle Custom DashPattern可用来获取或设置自定义的短划线和空白区域的数组 3 自定义画笔public propertyarray DashPattern array get voidset array value DashPattern属性数组中的第一个元素是所设置的短划线的长度 第二个元素为所设置的空白区域的长度 第三个元素又是所设置的短划线的长度 依此类推 虚线图案中每个短划线和空白区域的长度是数组中的元素值与Pen宽度的乘积 5 2GDI 绘图基础 二 画笔 OnPaint中添加 Graphics pGH e Graphics pGH PageUnit GraphicsUnit Millimeter Pen pPen gcnewPen Color Black 1 5 画粗实线圆 线宽为1 5mmpGH DrawArc pPen 10 10 40 40 0 360 array dashVals 30 2 2 2 分别表示短划线长度 间隔长度 短划线长度 间隔长度pPen DashStyle Drawing2D DashStyle Custom pPen DashPattern dashVals pPen Width 0 5 在工程上 细线线宽是粗线线宽的 3 为0 5mmpGH DrawLine pPen 5 30 55 30 画水平点划线pGH DrawLine pPen 30 5 30 55 画垂直点划线 4 使用标准画笔Pens和系统画笔SystemPensGDI 中 Pens类包含了定义标准颜色的静态属性 可直接引用 例如 pGH DrawLine Pens Black 30 5 30 55 除此之外 还可以使用SystemPens类来指定一个Windows标准界面颜色画笔来绘制图形 宽度为1个像素 例如 pGH DrawLine SystemPens Control 30 5 30 55 5 2GDI 绘图基础 二 画笔 GDI 中 抽象基类Brush封装了画刷的基本功能 它派生出Drawing命名空间中的SolidBrush TextureBrush Drawing2D命名空间中的HatchBrush LinearGradientBrush及PathGradientBrush等类 分别用于单色画刷 纹理画刷 阴影画刷 线性渐变画刷及路径渐变画刷 还可以使用标准画刷Drawing Brushes 系统画刷Drawing SystemBrushes 1 单色画刷 SolidBrush 为SolidBrush类的构造函数指定一个Color值 就可创建一个单色画刷 如 SolidBrush pBrush1 gcnewSolidBrush Color Blue SolidBrush pBrush2 gcnewSolidBrush Color FromArgb 0 0 255 三 画刷 P236 5 2GDI 绘图基础 2 纹理画刷 TextureBrush 用指定的Image图像填充区域内部 其构造函数有8个左右 常用的参数有Image image RectangledstRect RectangleFdstRect WrapModewrapMode image为用来填充的纹理图像 dstRect用来指定图像中的某一个区域来构造纹理画刷 wrapMode用来指定当纹理或渐变小于所填充的区域时平铺纹理或渐变的方式 其值可以是以下枚举成员之一 Clamp 纹理或渐变没有平铺 Tile 平铺渐变或纹理 TileFlipX 水平反转纹理或渐变 然后平铺该纹理或渐变 TileFlipY垂直反转纹理或渐变 然后平铺该纹理或渐变 TileFlipXY 水平和垂直反转纹理或渐变 然后平铺该纹理或渐变 三 画刷 5 2GDI 绘图基础 Graphics pGH e Graphics RectanglercCircle Rectangle 0 0 100 100 rcCircle Offset 20 20 Image img this BackgroundImage Rectanglerc1 Rectangle 0 0 30 30 rc1 Offset img Width 2 img Height 2 画出取纹理图像的区域pGH DrawRectangle Pens White rc1 定义纹理画刷System Drawing TextureBrush brush gcnewSystem Drawing TextureBrush img rc1 按默认平铺方式填充pGH FillRectangle brush rcCircle pGH DrawRectangle Pens White rcCircle 按Clamp方式填充rcCircle Offset 120 0 brush WrapMode Drawing2D WrapMode Clamp pGH FillRectangle brush rcCircle pGH DrawRectangle Pens White rcCircle 按TileFlipX方式填充rcCircle Offset 120 0 brush WrapMode Drawing2D WrapMode TileFlipX pGH FillRectangle brush rcCircle pGH DrawRectangle Pens White rcCircle 按TileFlipY方式填充rcCircle Offset 120 0 brush WrapMode Drawing2D WrapMode TileFlipY pGH FillRectangle brush rcCircle pGH DrawRectangle Pens White rcCircle 按TileFlipXY方式填充rcCircle Offset 120 0 brush WrapMode Drawing2D WrapMode TileFlipXY pGH FillRectangle brush rcCircle pGH DrawRectangle Pens White rcCircle 3 阴影画刷 HatchBrush 阴影画刷是一种由阴影样式 前景色和背景色属性构成的画刷 通过HatchBrush类的构造函数可以直接创建一个阴影画刷 HatchBrush类的构造函数的原型如下 HatchBrush HatchStylehatchstyle ColorforeColor HatchBrush HatchStylehatchstyle ColorforeColor ColorbackColor hatchstyle 指定可用于HatchBrush对象的不同图案 三 画刷 5 2GDI 绘图基础 例 在Paint事件处理函数中添加Graphics pGH e Graphics pGH TranslateTransform 10 10 获取HatchStyle所有值的名称Array styleName Enum GetNames Drawing2D HatchStyle typeid 定义图例和样式名称显示的起点Rectanglehatchrect Rectangle 0 0 100 20 PointFpt 绘制图例和样式名称Int32i 0 while iLength Object oitem styleName GetValue i 将指定字符串转换成HatchStyle枚举对象Object ohs Enum Parse Drawing2D HatchStyle typeid oitem ToString 将Object转换成HatchStyle枚举类型Drawing2D HatchStylehs safe cast ohs Drawing2D HatchBrush brush gcnewDrawing2D HatchBrush hs Color Black Color LightSkyBlue 构造阴影画刷pGH FillRectangle brush hatchrect 填充矩形 绘制样式名称pt X float hatchrect X pt Y float hatchrect Bottom pGH DrawString oitem ToString this Font Brushes Black pt hatchrect Offset 130 0 if hatchrect Right e ClipRectangle Right hatchrect Offset 0 40 hatchrect X 0 i 4 渐变画刷GDI 提供两种渐变画刷 LinearGradientBrush 线性渐变 和PathGradientBrush 路径渐变画刷 线性渐变 路径渐变 三 画刷 渐变画刷的创建及属性设置主要通过LinearGradientBrush和PathGradientBrush类的构造函数进行 5 2GDI 绘图基础 Graphics pGH e Graphics pGH TranslateTransform 10 10 doubler 50 0 doubleangle 0 0 array pt gcnewarray 6 for inti 0 i colors gcnewarray 6 colors 0 Color Red colors 1 Color Green colors 2 Color Blue colors 3 Color AliceBlue colors 4 Color LightPink colors 5 Color Azure 定义并创建一个正六边形路径Drawing2D GraphicsPath path gcnewDrawing2D GraphicsPath path AddLines pt 创建一路径渐变画刷Drawing2D PathGradientBrush pathbrush gcnewDrawing2D PathGradientBrush path 或直接通过点来创建 Drawing2D PathGradientBrush pathbrush gcnewDrawing2D PathGradientBrush pt pathbrush CenterPoint Point 30 30 pathbrush CenterColor Color Yellow pathbrush SurroundColors colors 创建一线性渐变画刷Drawing2D LinearGradientBrush linebrush gcnewDrawing2D LinearGradientBrush Rectangle 0 0 20 20 Color Red Color Blue Drawing2D LinearGradientMode BackwardDiagonal Rectanglerc Rectangle 0 0 150 100 rc Offset 50 30 pGH FillPath pathbrush path 使用路径渐变画刷填充pGH FillRectangle pathbrush rc 使用路径渐变画刷填充pGH DrawRectangle Pens Blue rc rc Offset 180 0 pGH FillRectangle linebrush rc 四 基本绘图函数 P240 5 2GDI 绘图基础 Graphics的SmoothingMode属性用于指定是否将平滑处理 消除锯齿 应用于直线 曲线或已填充区域的边缘 SmoothingMode AntiAlias 消除锯齿 SmoothingMode Default 不消除锯齿 SmoothingMode HighQuality 高质量平滑处理 但处理速度慢 SmoothingMode HighSpeed 高速度平滑处理 但处理质量较低 SmoothingMode Invalid 指定一个无效模式 SmoothingMode None 指定不消除锯齿 四 基本绘图函数 5 2GDI 绘图基础 实例 根据鼠标指定的一组点来画出连续折线 封闭多边形和样条曲线 1 创建一个Windows窗体应用程序项目Win Curve 2 为Form1窗体添加一个Panel 一个Group控件 在组框中添加三个单选按钮 Text分别设为 连续折线 封闭多边形 和 样条曲线 最后再添加一个按钮 Text设为 清除 设置有关属性 3 为Form1添加如下私有成员 并为Panel控件添加Paint事件 private staticArrayList points gcnewArrayList private PointptPrev 5 2GDI 绘图基础 四 基本绘图函数 private System Voidpanel1 Paint System Object sender System Windows Forms PaintEventArgs e Graphics pGH e Graphics 根据点的个数确定单选按钮是否禁用if this points CountradioButton1 Checked true this radioButton2 Enabled false this radioButton3 Enabled false else this radioButton2 Enabled true if this points Count 4 this radioButton3 Enabled true 根据点来选择的类型绘制 并绘制各个顶点if this points Countpoints Count 1 Pointpt safe cast this points 0 pGH FillRectangle Brushes DarkBlue pt X 2 pt Y 2 4 4 return array ptarray gcnewarray this points Count 将集合列表对象添加到该数组中for inti 0 ipoints Count i ptarray i safe cast this points i pGH FillRectangle Brushes DarkBlue ptarray i X 2 ptarray i Y 2 4 4 pGH SmoothingMode Drawing2D SmoothingMode AntiAlias if this radioButton1 Checked pGH DrawLines Pens Blue ptarray elseif this radioButton2 Checked pGH DrawPolygon Pens Blue ptarray elseif this radioButton3 Checked pGH DrawCurve Pens Blue ptarray 1 0 4 为清除按钮添加Click事件处理 函数体中代码 this points Clear this panel1 Invalidate 强制执行Paint事件处理函数 5 为各单选按钮添加CheckedChanged事件的共同处理方法On Checked 在其中添加下列代码 this panel1 Invalidate 强制执行Paint 6 为Panel控件添加MouseDown事件处理方法 private System Voidpanel1 MouseDown System Object sender System Windows Forms MouseEventArgs e ptPrev Point e X e Y points Add ptPrev this panel1 Invalidate 强制执行Paint事件 7 为Panel控件添加MouseMove事件处理方法 并添加下列代码 5 2GDI 绘图基础 四 基本绘图函数 private System Voidpanel1 MouseMove System Object sender System Windows Forms MouseEventArgs e if this points Countpoints Count 1 Pointpt safe cast points nIndex Graphics g this panel1 CreateGraphics 创建与panel1控件相关联的Graphicsg DrawLine gcnewPen panel1 BackColor pt ptPrev ptPrev Point e X e Y g DrawLine Pens Gray pt ptPrev 5 2GDI 绘图基础 四 基本绘图函数 8 编译运行 GDI 和GDI提供多个类用于在Windows窗体上绘制文本 如Graphics类的DrawString 它允许指定文本的各种特征 如如位置 边框 字体和格式等 也可以使用TextRenderer类提供的DrawText和MeasureText静态方法绘制和测量文本 5 3GDI 字体和文本绘制 绘制文本之前 一般要构造一个FontFamily对象和一个Font对象 FontFamily对象指定字样 例如Arial 而Font对象指定字号 字形和单位等 也可直接使用Font构造函数直接构造FontFamily对象 涉及文本操作的其他类还包括StringFormat 封装文本布局信息 显示操作等功能 和TextFormatFlags 指定文本字符串的显示和布局信息 提交给用户进行字体设置可使用通用字体对话框类或控件 可以用各种图形文件格式 BMP GIF JPEG EXIF PNG TIFF WMF和ICON 构造Bitmap对象 5 4GDI 图像处理 使用GDI 的Image类和Bitmap类可以轻松地处理图像 System Drawing Imaging命名空间提供更为高级图像处理功能 DrawImage是GDI 的Graphics类显示图像的核心方法 它的重载形式有30个 在其中可以指定要显示的图像 显示图像的位置 图像填充的矩形区域及显示图像采用的度量单位等 一 概述 P273 5 4GDI 图像处理 二 常用的图像处理操作 1 调用和显示图像文件在GDI 中调用和显示图像文件是非常容易的 一般先通过Image或Bitmap调入一个图像文件构造一个对象 然后调用Graphics DrawImage方法在指定位置处显示全部或部分图像 Graphics gr e Graphics Image image Image FromFile L 1 jpg gr DrawImage image 10 10 Rectanglerect Rectangle 20 10 image Width image Height gr DrawImage image rect 5 4GDI 图像处理 二 常用的图像处理操作 Imaging Metafile metafile gcnewImaging Metafile 2 emf gr DrawImage metafile 10 image Height 20 2 图像旋转和拉伸图像的旋转可以使用Image类的RotateFlip方法来实现的 其参数可用来指定图像旋转的类型 另外 也可指定DrawImage中的参数destPoints完成该操作 其第一个点是用来定义新坐标系的原点 第二点用来定义X轴的方法和图像X方向的大小 第三个是用来定义Y轴的方法和图像Y方向的大小 若destPoints定义的新坐标系中两轴方向不垂直 就能达到图像拉伸的效果 Graphics gr e Graphics Image image Bitmap FromFile L s bmp Rectanglerect Rectangle 10 10 150 250 gr DrawImage image rect array pts Point 2500 10 Point 350 100 Point 200 150 gr DrawImage image pts 5 4GDI 图像处理 二 常用的图像处理操作 3 插值模式的使用缩放时使用插值模式可以控制图像质量 Graphics对象的InterpolationMode属性便是为此而设计 该枚举值主要是 3 插值模式的使用Bicubic 指定双三次插值法 将图像收缩为原始大小的25 以下时 此模式不适用 Bilinear 指定双线性插值法 将图像收缩为原始大小的50 以下时 此模式不适用 Default 指定默认模式 High 指定高质量插值法 HighQualityBicubic 指定高质量的双三次插值法 此模式可产生质量最高的转换图像 HighQualityBilinear 指定高质量的双线性插值法 Low 指定低质量插值法 NearestNeighbor 指定最临近插值法 5 4GDI 图像处理 二 常用的图像处理操作 4 图片格式的转换使用Image类的Save方法 可以将图像按指定的格式保存到文件中 5 4GDI 图像处理 二 常用的图像处理操作 实例 5 4GDI 图像处理 图像显示和保存 1 创建一个Windows窗体应用程序项目Win Image 2 在打开的窗体设计器中 为Form1窗体添加一个Label控件和两个按钮 按图设置控件Text及有关属性 3 为 调入 和 保存 按钮添加Click事件 代码分别为 private System Voidbutton1 Click System Object sender System EventArgs e OpenFileDialog pofd gcnewOpenFileDialog pofd Filter L 位图文件 bmp bmp JPG图像文件 jpg jpg 所有图像文件 bmp jpg gif wmf emf ico png System Windows Forms DialogResultnresult pofd ShowDialog if nresult System Windows Forms DialogResult O

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论