多媒体开发技术2ppt课件_第1页
多媒体开发技术2ppt课件_第2页
多媒体开发技术2ppt课件_第3页
多媒体开发技术2ppt课件_第4页
多媒体开发技术2ppt课件_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

.,1,多媒体开发技术2,计算机教学实验中心,.,2,设备环境,在Windows程序中,应用程序(包括Windows本身)的输出并不直接面向物理的设备,而是针对一个称之为设备环境(DeviceContext)的逻辑设备进行操作。设备环境包含了关于当前选定用于一种设备的画笔、画刷、字体和位图等信息,设备环境与实际设备之间的信息传送由Windows直接管理。MFC提供了用于若干不同类型的设备环境的类,应用程序在将任何东西画到设备中去之前,必须明确索取一个设备环境。,.,3,在MFC应用中绘图,在MFC应用程序中,所有的绘制调用均通过相应的设备环境对象实现。在MFC类库中,用CDC类封装设备环境对象,并提供了在窗口的客户程序区域上画图的方法。所有图形的输出都可以使用CDC类提供方法来进行-对颜色进行操作、坐标映射和转换,对多边形和区域进行操作,绘制各种形状,绘制文本,处理字体等。,.,4,MFC中的绘图工具对象,MFC定义了若干种对应于Windows绘图工具的图形对象,包括画笔、画刷、字体、位图等。这些Windows绘图工具封装在MFC图形对象类中,并且都是由CGdiObject基类派生而来。这些图形对象类分别是:CPen、CBrush、CFont、CBitmap等。,.,5,画笔是用来画线的工具,是CPen类的对象。/声明画笔对象,并创建宽度为3的红色实线笔CPenpenRed(PS_SOLID,3,RGB(255,0,0);/使用新的画笔,保存原来的画笔以便恢复CPen*pOldPen=pDC-SelectObject(,画笔,.,6,CDC:SelectObject()方法选定放入当前设备环境的新对象,并返回一个指向被替换对象的指针,因此,语句pOldPen=pDC-SelectObject(保存了原来的画笔。保存并恢复原来画笔的原因是,每个图形设备接口对象要占用一个HDC句柄,而可用的句柄数量是有限的,在使用完后要及时释放。,.,7,画线,画线工作需经两步完成:首先确定线的起始端位置,这可通过调用成员函数MoveTo完成,其原型为:CPointMoveTo(intx,inty);MoveTo将绘图位置移至指定坐标处,并返回移动前的绘图位置。确定了线的起点后,即可使用成员函数LineTo画线:BOOLLineTo(intx,inty);,.,8,绘制矩形、椭圆,绘制矩形的成员函数为:BOOLRectangle(intx1,inty1,intx2,inty2);绘制椭圆成员函数的原型为:BOOLEllipse(intx1,inty1,intx2,inty2);其参数为需要绘制的矩形的左上角坐标(x1,y1)和右下角坐标(x2,y2)。,.,9,【例6-4】在窗口中随机的画了一些直线和其它几何形状。,思路:建立MFC框架程序,在OnDraw中写出相应的绘图代码即可。步骤:1)新建一个单文档MFC程序,项目名称为mm065,其余设置不变。2)在视图类的OnDraw中键入绘图代码。3)在视图类的开始出饱含以下头文件。4)编译并运行程序,.,10,显示位图,载入位图资源:BOOLLoadBitmap(LPCTSTRResourceName);读位图信息:intGetBitmap(BITMAP*pBitMap);首先应建立一合适的内存设备环境:CDCMemDC;MemDC.CreateCompatibleDC(NULL);并将位图选入该设备环境:MemDC.SelectObject(,.,11,显示位图,用CDC类的BitBlt()成员函数从内存设备环境中将位图复制到指定设备(如窗口或打印机)。BitBlt()函数的原型为:BOOLBitBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,DWORDdwRop);其中参数x,y为目标区左上角坐标,nWidth和nHeight分别为目标区的宽度和高度(逻辑坐标),pSrcDC为内存设备指针,xSrc和ySrc为原图中欲显示块左上角坐标,dwRop为复制方式,常用值为SRCCOPY,即按原样复制。,.,12,【例6-5】显示一张位图文件(.BMP)。思路:按上述步骤实现位图的现实即可,.,13,BMP文件结构,BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。其文件头结构定义如下:typedefstructtagBITMAPFILEHEADERWORDbfType;/位图文件的类型,必须为BMDWORDbfSize;/位图文件的大小,以字节为单位DWORDbfOffBits;/位图数据的起始位置,以相对于位图/文件头的偏移量表示,以字节为单位BITMAPFILEHEADER;,.,14,位图信息图头,紧接在文件头之后的是位图信息图头,其中的数据用于说明位图的尺寸等信息。定义如下:typedefstructtagBITMAPINFOHEADERDWORDbiSize;/本结构所占用字节数LONGbiWidth;/位图的宽度,以像素为单位LONGbiHeight;/位图的高度,以像素为单位WORDbiBitCount;/每个像素所需的位数,/必须是1(双色)、4(16色)、8(256色)或24(真彩色)BITMAPINFOHEADER;,.,15,颜色表,信息头之后是颜色表用于说明位图中的颜色(24位位图没有颜色表),它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:typedefstructtagRGBQUADBYTErgbBlue;/蓝色的亮度(值范围为0-255)BYTErgbGreen;/绿色的亮度(值范围为0-255)BYTErgbRed;/红色的亮度(值范围为0-255)BYTErgbReserved;/保留,必须为0RGBQUAD;颜色表中RGBQUAD结构数据的个数有biBitCount来确定,当biBitCount=1、4或8时,分别有2、16和256个表项;当biBitCount=24时,没有颜色表项。,.,16,对齐原则,24位真彩色位图,1个像素占3个字节,每个字节表示一个颜色分量,顺序由低位到高位分别是蓝、绿、红。同时,Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充。因此,一个扫描行所占的实际字节数计算为:DataSizePerLine=(biWidth*biBitCount+31)/32*4;,.,17,BMP位图的读写与处理,将bmp文件读入内存,让后将R、G、B3个分量分别存储为3个二维矩阵。二维矩阵的列行分别对应图象的宽度和高度。对图像的处理就是对矩阵的变换。旋转:旋转需要有一个旋转中心,通常的做法是以图像的中心为圆心旋转,下面的算法保持图像的原有尺寸,超出的部分被裁剪掉。,.,18,镜像和转置,镜像(mirror)和转置(transpose)镜像分水平镜像和垂直镜像两种,水平镜像是将矩阵的第一列和最后一列对调,第二列和倒数第二列对调,依次类推;垂直镜像则是交换行值;转置就是矩阵的转置。转置和旋转90度是有区别的,转置后图的宽高对换了。,.,19,浮雕,浮雕效果就是只将图像的变化部分突出出来,而相同颜色部分则被淡化,使图像出现纵深感,从而达到浮雕效果,采用的算法可以是将要处理的像素取值为与处于对角线上的另一个像素间的差值,这样只

温馨提示

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

评论

0/150

提交评论