第四章 图形、图像与多媒体.ppt_第1页
第四章 图形、图像与多媒体.ppt_第2页
第四章 图形、图像与多媒体.ppt_第3页
第四章 图形、图像与多媒体.ppt_第4页
第四章 图形、图像与多媒体.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

版权所有 1 第四章图形 图像与多媒体 图形图像及多媒体处理也是C 的重要应用 NET框架通过封装GDI 实现了图形图像的处理功能 利用C 可以开发出强大的图形 图像与多媒体程序 2 版权所有 目录 GDI 概述GDI 绘图基础基本的绘图方法图像的显示与处理声音与视频的播放 3 版权所有 4 1GDI 概述 早期的Window程序中 可以使用GDI GraphicsDeviceInterface 图形设备接口 在一个窗体中绘制图形 文本和图像 但它的功能有限 GDI 是GDI的一个新版本 它不仅在GDI基础上添加许多新特性 而且对原有的GDI功能进行优化 并在为开发人员提供的二维矢量图形 文本 图像处理 区域 路径以及图形数据矩阵等方面构造了一系列相关的类 其中 图形类Graphics是GDI 接口中的一个核心类 许多绘图操作都可用它完成 4 版权所有 4 1 1GDI 命名空间GDI 包含大约60个类 50个枚举和8个结构 所有的函数都保存在System Drwaing dll程序集中 5 版权所有 4 1 2基本数据结构在绘图操作中 常常需要使用Point 点 Size 大小 和Rectangle 矩形 等简单的数据结构 6 版权所有 1 Point Size和Rectangle结构的构造函数 1 Point用来表示平面上的点或一个位置 x y 其属性有X和Y Point intdw dw的低16位指定水平坐标 高16位指定垂直坐标 Point Sizesz sz的宽度Width和高度Height用来指定Point的X和Y的值 Point intx inty 2 Size结构常用来表示一个矩形的大小 其属性有Width和Height Size Pointpt pt的X和Y属性用来指定Size的Width和Height Size intwidth intheight 3 Rectangle结构用来表示一个矩形的位置和大小 其属性有X Y Width Height Location Left Right Top Bottom Rectangle intx inty intwidth intheight Rectangle Pointlocaton Sizesize 7 版权所有 2 基本运算符操作Point Size和Reactangle类结构重载了常用的运算符操作 如Point和Size结构的 操作 Rectangle结构的 操作等 这里只介绍Point和Size结构的 和 操作 1 操作若向Point对象加上一个Size对象 则返回Point对象 例如 Drawing Pointpt Drawing Point 25 18 Drawing 10 5 则结果为Point 35 13 若向Size对象加上一个Size对象 则是它们的宽度和高度相加 2 操作若向Point对象减去一个Size对象 则返回Point对象 例如 Drawing Pointpt Drawing Point 25 19 Drawing 15 5 8 版权所有 3 Rectangle结构的常用操作 1 扩大和缩小使用Inflate方法 voidInflate Sizesize voidInflate intwidht intheight 2 相交和合并成员方法Intersect和Union分别用来将两个矩形进行相交和合并 voidIntersect Rectanglerect staticRectangleIntersect Rectanglea Rectangleb staticRectangleUnion Rectanglea Rectangleb 9 版权所有 3 移动Offset方法用来调整矩形的位置 voidOffset Pointpos voidOffset intx inty 4 测试和判断IntersectsWith方法用来判断是否和指定的矩形相交 若有相交 则返回true 否则返回false boolIntersectWidth Rectanglerect 10 版权所有 4 1 3处理图形图像的步骤处理图形包括两个步骤 创建Graphics对象 使用Graphics对象绘制线条和形状 呈现文本或显示与操作图像 11 版权所有 4 2GDI 绘图基础 4 2 1坐标系统1 全局坐标 页面坐标和设备坐标2 Grahpics与坐标系统有关的成员3 全局变换全局坐标到页面坐标的坐标变换叫做全局变换 保存在Graphics类的Transform属性中 主要包含两种变换 平移 旋转 比例 12 版权所有 4 页面变换页面坐标的原点总是在虚拟绘图平面的左上角 由于页面坐标标度量单位是像素 所以设备坐标与页面坐标是相同的 但如果将页面坐标改成其他的单位 如英寸 两者就不同了 这时发生页面坐标到设备坐标的变换称为页面变换 Graphics类的PageUnit和PageScale两个属性提供页面变换操作 13 版权所有 案例4 1 建立坐标系并画圆 设计一个坐标系 坐标原点在窗体的中心 单位为英才 X轴向右为正 Y轴向上为正 画出坐标轴 在此坐标系绘制一个圆 圆心在坐标圆点 半径为1英寸 14 版权所有 4 2 2画笔画笔是绘制各种直线和曲线的一种图形工具 它主要有线型 颜色和线宽属性 默认的线宽为1个像素 线型为实线 15 版权所有 1 建立Pen对象 1 直接使用Pen类构造函数 常用下面的三种重载形式 publicPen Colorc 创建某一种颜色的Pen对象 publicPen Colorc floatw 创建某一种颜色和相应宽度的Pen对象 publicPen Brushb 创建某一刷子样式的Pen对象 publicPen Brushb floatw 创建某一刷子样式并具有相应宽度的Pen对象 16 版权所有 2 从SystemPens和Pens类获取Pen对象的引用 System Drawing SystemPens类用于创建与用户界面单位和系统颜色相匹配的笔 该类的每一个共享属性都返回一个Pen对象的引用 例如 Penpe SystemPens HighlightText 画笔使用选定项的文本颜色 17 版权所有 2 Pen的常用属性Brush属性 获取或设置用于确定此Pen对象的属性的Brush对象 Color属性 获取或设置此Pen对象的颜色 Width属性 获取或设置此Pen对象的宽度 DashStyle属性 获取或设置用于通过此Pen对象绘制的虚线的样式 DashCap属性 获取或设置用在短划线终点的帽样式 Drawing2D DashCap枚举值 18 版权所有 EndCap属性 获取或设置用在通过此Pen对象绘制的直线终点的帽样式 取Drawing2D LineCap枚举值 如表4 4所示 StartCap属性 获取或设置用在通过此Pen对象绘制的直线起点的帽样式 取Drawing2D LineCap枚举值 如表4 4所示 LineJoin属性 获取或设置通过此Pen对象绘制的两条连续直线终点之间的联接样式 指定如何在图形 子路径 中联接连续的直线或曲线段 该图形 子路径 包含在GraphicsPath对象中 Drawing2D LineJoin枚举值 19 版权所有 2 画刷Brush类决定如何填充图形形状 如矩形 椭圆形 扇形 多边形和封闭路径 内部 这是一个抽象基类 不能进行实例化 若要创建一个画刷对象 可使用从Brush派生出的类 这些派生类主要有 SolidBrush 单色画刷 TextureBrush 纹理画刷 HatchBrush 阴影画刷 LinearGradientBrush 线性渐变画刷 PathGradientBrush 路径渐变画刷 前两个定义在System Drawing命名空间中 后三个定义在System Drawing Drawing2D命名空间中 20 版权所有 4 3基本的绘图方法 4 3 1绘制线条或形状1 画直线使用Graphics的DrawLine方法可以绘制直线 publicvoidDrawLine Penpen intx1 inty1 intx2 inty2 绘制一条连接由坐标对指定的两个点的线条 publicvoidDrawLine Penpen floatx1 floaty1 floatx2 floaty2 绘制一条连接由坐标对指定的两个点的线条 publicvoidDrawLine Penpen Pointp1 Pointp2 绘制一条连接两个Point结构的线 21 版权所有 2 画椭圆使用Graphics的DrawEllipse方法可以绘制椭圆 publicvoidDrawEllipse Penpen Rectanglerect 绘制边界Rectangle结构指定的椭圆 publicvoidDrawEllipse Penpen intx inty intw inth 绘制一个由边框 该边框由一对坐标 高度和宽度指定 定义的椭圆 publicvoidDrawEllipse Pen float float float float 绘制一个由边框 该边框由一对坐标 高度和宽度指定 定义的椭圆 22 版权所有 3 绘制圆弧使用Graphics的DrawArc方法可以绘制圆弧 publicvoidDrawArc Penpen Rectanglerect floatstartAngle floatsweepAngle 绘制一段弧线 它表示Rectangle结构指定的椭圆的一部分 publicvoidDrawArc Penpen intx inty intw inth intstartAngle intsweepAngle 绘制一段弧线 它表示由一对坐标 宽度和高度指定的椭圆部分 publicvoidDrawArc Penpen floatx floaty floatw floath floatstartAngle floatsweepAngle 绘制一段弧线 它表示由一对坐标 宽度和高度指定的椭圆部分 23 版权所有 4 画扇形图使用Graphics的DrawPie方法可以绘制扇形图 所谓扇形图其实质就是一段圆弧的两个端点与圆心相连 DrawPie方法的格式与DrawArc方法基本一致 24 版权所有 5 画矩形使用Graphics的DrawRectangle方法可以绘制矩形 publicvoidDrawRectangle Penpen Rectangler 绘制由Rectangle结构指定的矩形 publicvoidDrawRectangle Penpen intx inty intw inth 绘制由坐标对 宽度和高度指定的矩形 publicvoidDrawRectangle Penpen floatx floaty floatw floath 绘制由坐标对 宽度和高度指定的矩形 25 版权所有 6 画多边形使用Graphics的DrawPolygon方法可以绘制多边形 publicvoidDrawPolygon Penpen Point p 绘制由一组Point结构定义的多边形publicvoidDrawPolygon Penpen PointF p 绘制由一组PointF结构定义的多边形 26 版权所有 7 画贝塞尔样条曲线使用Graphics的DrawBezier方法可以绘制贝塞尔样条曲线 publicvoidDrawBezier Penpen Pointp1 Pointp2 Pointp3 Pointp4 绘制由4个Point结构定义的贝塞尔样条 publicvoidDrawBezier Penpen PointFp1 PointFp2 PointFp3 PointFp4 绘制由4个PointF结构定义的贝塞尔样条 publicvoidDrawBezier Penpen floatx1 floaty1 floatx2 floaty2 floatx3 floaty3 floatx4 floaty4 绘制由四个表示点的有序坐标对定义的贝塞尔样条 27 版权所有 8 绘制闭合曲线使用Graphics的DrawClosedCurve方法可以闭合曲线 publicvoidDrawClosedCurve Penpen Point p 绘制由Point结构的数组定义的闭合基数样条 publicvoidDrawClosedCurve Penpen PointF p 绘制由PointF结构的数组定义的闭合基数样条 publicvoidDrawClosedCurve Penpen Point p floatt FillModefm 使用指定的张力绘制由Point结构数组定义的闭合基数样条 publicvoidDrawClosedCurve Penpen PointF p floatt FillMode 使用指定的张力绘制由PointF结构数组定义的闭合基数样条 28 版权所有 9 绘制非闭合曲线使用Graphics的DrawCurve方法可以非闭合曲线 参数格式同上述绘制闭合曲线的第一个方法 10 绘制路径使用Graphics的DrawPath方法可以绘制路径 路径是直线 矩形 多边形或曲线等组成 publicvoidDrawPath Penpen GraphicsPathpath 绘制GraphicsPath对象 29 版权所有 11 绘制填充图形和上述方法对应的 还有一组Fill开头的方法 可以用来绘制填充图形 例如 FillEllipse方法可以绘制填充椭圆 30 版权所有 案例4 2 绘制一个小汽车 利用基本的绘图方法 在界面上绘制一个小车 31 版权所有 案例4 3 一个简单的绘图程序 本案例是一个简单的绘图程序 能够利用鼠标任意画 能够画直线 椭圆及矩形 可以设置色彩 32 版权所有 4 3 2绘制文字可以使用任何图形对象作为绘制文本的表面 绘制文本需要一个Brush对象 它指示将使用什么图案填充文本 和一个Font对象 它描述要填充的图案 字体可以是系统上安装的任何已命名的字体 而画笔可以为任意类型的画笔 因此 有可能使用纯色 图案或者甚至图像来绘制文本 33 版权所有 4 4图像的显示与处理 4 4 1图像的显示1 Bitmap类Bitmap类封装GDI 位图 此位图由图形图像及其属性的像素数据组成 Bitmap对象是用于处理由像素数据定义的图像的对象 可以从各种各样的图形文件格式 BMP GIF JPEG EXIF PNG TIFF和ICON 中构造Bitmap对象 34 版权所有 1 主要的属性Flags 获取此Image对象的属性标记 Height 获取此Image对象的高度 Palette 获取或设置用于此Image对象的调色板 RawFormat 获取此Image对象的格式 Size 获取此图像的以像素为单位的宽度和高度 Width 获取此Image对象的宽度 35 版权所有 2 主要的方法Clone 创建此Bitmap 用指定的PixelFormat定义 部分的副本 FromHicon 从图标的Windows句柄创建Bitmap FromResource 从指定的Windows资源创建Bitmap对象 GetBounds 以指定的单位获取此Image对象的边框 GetPixel 获取此Bitmap中指定像素的颜色 GetThumbnailImage 返回此Image对象的缩略图 Save 将此图像以指定的格式保存到指定的流中 SetPixel 设置Bitmap对象中指定像素的颜色 36 版权所有 2 图像的显示若使用Image来显示图像 可以用Image的静态方法FromFile 来加载图像文件 如 Imageim Image FromFile c ba jpg g DrawImage im 0 0 37 版权所有 4 4 2保存 拷贝和粘贴保存图像可以使用Bitmap的Save方法 例如 pictureBox1 image Save c myimage bmp 在保存图像时 还可以指定图像文件的格式 例如 pictureBox1 image Save c myimage bmp pictureBox1 image Save c myimage bmp pictureBox1 image Save c myimage bmp ImageFormat Jpeg 38 版权所有 Bitmap类提供了Clone方法 可用于制作现有Bitmap对象的副本 Clone方法带有源矩形参数 可用于指定要复制的原始位图的部分 下面的示例通过拷贝现有Bitmap对象的上半部分来创建Bitmap对象 然后绘制两幅图像 39 版权所有 4 4 3图像处理1 彩色图像变成灰度图像将彩色图像像素值分解为三基色R G B 求其和的平均值 然后使用SetPixel方法以该平均值参数生成图像 对一个像素的处理过程如下 1 取颜色值Colorc im GetPixel i j im为Bitmap类型对象 40 版权所有 2 分解颜色值intr c R intg c R intb c R 3 取平均 生成新的颜色intcc r g b 3 Colorc1 Coloe FromArgb cc cc cc 4 设定图像颜色im1 SetPixel i j c1 im1是im的复制 41 版权所有 2 对图像进行浮雕处理将彩色图像像素值分解为三基色R G B 分别与相邻像素的三基色R G B相减后加上一个常量 128 然后作为新的像素的RGB颜色值 为了防止颜色溢出 需处理小于0和大于255的颜色值 对一个像素的处理过程如下 1 取两个像素的颜色值Colorc1 im GetPixel i j im为Bitmap类型对象Colorc2 im GetPixel i 1 j 1 取相邻像素的颜色值 42 版权所有 2 对两个像素的颜色值进行分解 相减后加上128 intr Math Abs c1 R c2 R 128 intg Math Abs c1 G c2 G 128 intb Math Abs c1 B c2 B 128 3 处理后生成新的颜色if r255 r 255 if g255 g 255 if b255 b 255 Colorcc Coloe FromArgb r g b 4 设定图像颜色im1 SetPixel i j cc im1是im的复制 43 版权所有 3 图像的透明度处理取出颜色值后 再给定一个透明度的值 利用Color FromRgb inta Colorc 方法即可生成目标图像的颜色值 从而实现不同的透明效果 参数a的取值在0 255之间 c im GetPixel i j Colorcc Color FromArgb a c im SetPixel i j cc 44 版权所有 4 图像的旋转与拉伸图像的旋转可以使用Image类的RotateFlip方法实现 它只有一个RotateFlipType枚举参数 用来指定图像的旋转和翻转的类型 45 版权所有 5 图像格式转换GDI 的Image类中有一个Save方法 它可以用来将图像按指定的格式保存文件中 格式如下 voidSave stringfilename ImageFormatformat 其中 filename用来指定要保存的文件名 format用来指定要保存的格式 可以直接引用ImageFormat类的静态成员属性来指定 46 版权所有 案例4 4 图像处理程序 创建一个Windows应用程序 在窗体上添加两个图片框和三个按钮 第一个图片显示原图像 第二个图片框显示处理后的图像 47 版权所有 4 5声音与视频的播放 4 5 1MediaPlayer控件及其使用在C 中 可以引用Windows自带的WindowsMediaPlayer组件播放多种格式的视频和音频文件 包括MPEG视频 AVI WAV和MIDI等格式的文件 48 版权所有 1 添加WindowsMediaPlayer控件WindowsMediaPlayer控件不是标准控件 在工具箱中无法找到 在使用该控件之前需把他加载到工具箱中 加载方法如下 1 执行 工具 添加 移

温馨提示

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

评论

0/150

提交评论