多媒体编程基础课程综合作业说明书-MFC图形图像处理及绘图软件设计成绩南京工程学院题目多媒体综合设计班级学生姓名学号2011 年 10 月 28 日,1,一、程序功能与设计思路整体设计目标:含有文字处理、绘图、图像、音频视频四部分内容各3种以上功能,自己设计一个标志,放在窗口界面上,带动画效果 1、主界面1.1 主界面实现功能说明如下:, 菜单项包括文字处理、绘图、图像、音频视频,点击进入各个功能界面, 动画显示个人信息1.2 界面效果显示:,2,1.3 主界面设计思路:首先创建一个基于对话框的对话框的MFC应用程序,然后在资源里添加五个菜单栏和四个对话框并将其对应连接起来,在主对话框菜单栏中添加四个菜单选项与四个子对话框链接,以实现点击菜单项跳出对应的对话框。
然后在主对话框中添加一个shockwaveflash控件以实现在主界面播放设计好的flash动画。
其功能结构如下:主界面图像处理音频视频播放标志文字处理绘图工具,3,2、文字处理2.1 文字实现功能说明如下:, 菜单项包括文字镂空、文字旋转、颜色渐变、倾斜文字,点击菜单项将显示各个功能。
, 文字镂空:在对话框中显示一串字符,字符中间镂空显示。
, 文字旋转:在对话框中显示一串字符,字符循环旋转,并实现空间。
视觉效果,且当前字符显示红色,其余字符显示蓝色。
, 颜色渐变:在对话框中显示一串字符,并整体实现颜色渐变。
, 倾斜文字:在对话框中旋转循环显示字体,每个字符串角度相差15度,围成一个圈。
2.2 界面效果显示:,4,2.3 文字处理功能结构图:文字处理镂空文字文字旋转颜色渐变倾斜文字3、绘图工具3.1 绘图工具实现功能如下:, 画点, 画线, 画椭圆, 画矩形,矩形内部用渐变颜色填充, 涂鸦, 设置画图的线型、线宽, 设置画图线条的颜色,5,3.2 功能界面效果显示,6,3.3 绘图工具功能结构图: 点线绘椭圆图矩形绘图涂鸦工具设置线型设置设置线宽设置颜色4、图像处理4.1 图像处理实现功能如下: , 从本地磁盘打开.bmp文件, 图片去色, 浮雕效果, 颜色拾取, 轮廓识别, 对称变换, 颜色取反,7,4.2 功能界面效果显示,8,,9,4.3图像处理功能结构图:图像处理图像内容浏览颜色浏览特效变换打开内容内容内容内容内容5、音频视频播放5.1音频视频功能实现:, 从本地磁盘添加音频视频文件, 双击播放音频视频文件, 点击播放按钮播放文件, 点击上一个、下一个选择当前文件的上一个、下一个文件5.2 功能界面显示,10,5.3 音频视频播放功能结构图:音频视频播放控制添加文件上一个下一个播放,11,二、相关原理知识介绍1、文字处理1.1文字处理的基本知识Windows使用了两种主要字体:一种是等宽字体,一种是可变宽字体。
同时Windows又定义了三种不同类型的字体:光栅字体(设备相关的点阵图字体)、矢量字体(设备无关的由一系列线段构成的字体)、TrueType字体(设备无关的用线条和样条曲线来定义轮廓的字体),其中TrueType字体可以在进行任何限度的缩放后,而仍然保持良好的字体质量。
此外,还有OpenType字体,它也是设备无关的,可以用来定义手写字体。
无论哪种字体,在Windows系统中都是使用TEXTMERIC和LOGFONT两个结构来进行描述的。
在应用中通过这两个结构来获取字体信息,定义显示文字所需要的字体。
1.2文本输出函数函数名功能用当前字体在指定位置处写一个字符串 TextOut用当前字体在矩形区域内写一个字符串 ExTextOut在指定位置写一个字符串 TabbedTextOut在指定矩形中绘制格式化的文本 DrawText1.3 文字处理的基本步骤1)获取设备环境(CDC* pDC)2)设置系统字体----默认字体----得到当前的字体(部分)信息,以该信息输出-----创建自定义字体,选入设备环境3)输出文本 (文本输出函数)1.4、设置系统字体的步骤1)创建字体对象:CFont font; // font为字体对象2)创建字体CreateFont()CreatePointFontCreateFontIndirect()CreateFontFontIndirect()3) 调用成员函数SelectObject将字体选入设备环境: SelectObject(&font);1.5、控制文本的背景色在设备描述中有两项可以影响背景,一个是背景色,另一个是背景模式。
背景模式可以为透明的(Transparent)或不透明的(Opaque)。
缺省为不透明的。
背景模式可用函数SetBkMode来设置,它设置当前的背景模式并返回原来的背景模式。
函数原型为:int SetBkMode(int nBkMode);参数nBkMode指定背景模式,其值可以是OPAQUE或者TRANSPARENT;如果值为OPAQUE,则显示时背景都改为当前背景颜色。
如果值为TRANSPARENT,则不改变背景颜色,此时,任何SetBkColor函数调用都无效,12,2、简单绘图工具2.1 绘图的基本方法实现简单图形的绘制,绘图功能中,有绘制直线、矩形、椭圆、涂鸦等。
用到的方法如下:CPoint MoveTo(int x,int y); //直线起点CPoint LineTo(int x,int y); //直线终点BOOL Rectangle(int x1,int y1,int x2,int y2); //绘制矩形BOOL Ellipse(int x1,int y1,int x2,int y2); //绘制椭圆涂鸦部分,以鼠标移动的轨迹画线。
同样要用到MouseMove()函数。
使起点为鼠标前一个位置,终点为鼠标当前位置,以画直线的方式完成。
对于线型、线宽、颜色的设置,通过使用颜色通用对话框完成。
2.2 绘图时需要用到的设备环境类介绍设备环境类CDC提供了绘制和打印的全部函数。
为了能让用户使用一些特殊的设备环境,CDC还派生了CPaintDC、CClientDC、CWindowDC和CMetaFileDC类。
(1)CPaintDC比较特殊,它的构造函数和析构函数都是针对OnPaint进行的,但用户一旦获得相关的CDC指针,就可以将它当成任何设备环境(包括屏幕、打印机)指针来使用。
CPaintDC类的构造函数会自动调用BeginPaint,而它的析构函数则会自动调用EndPaint。
(2)CClientDC只能在窗口的客户区(不包括边框、标题栏、菜单栏以及状态栏)中进行绘图,点(0,0)通常指的是客户区的左上角。
而CWindowDC允许在窗口的任意位置中进行绘图,点(0,0)指整个窗口的左上角。
CWindowDC和CClientDC构造函数分别调用GetWindowDC和GetDC,但它们的析构函数都是调用ReleaseDC函数2.3 CRect 类常用的成员函数成员函数功能说明int Width( ) const; 返回矩形的宽度返回矩形的高度 int Height( ) const;返回矩形的大小,CSize中的cx和cy成员分别表示矩CSize Size( ) const; 形的宽度和高度返回矩形左下角的点坐标 CPoint& TopLeft( );返回矩形右下角的点坐标 CPoint& BottomRight( );返回CRect的中点坐标 CPoint CenterPoint( ) const;如果一个矩形的宽度或高度是0或负值,则称这个矩形BOOL IsRectEmpty() const; 为空,返回TRUE如果一个矩形的上、左、下和右边的值都等于0,则返BOOL IsRectNull() const; 回TRUE如果点point位于矩形中(包括点在矩形的边上),则返BOOL PtInRect( POINT point )回TRUE const;将矩形的各边设为指定的值,左上角点为(x1, y1),右下void SetRect( int x1, int y1, int角点为(x2, y2) x2, int y2 );将矩形的所有坐标设置为零 void SetRectEmpty();使矩形符合规范 void NormalizeRect( );void OffsetRect( int x, int y ); 移动矩形,水平和垂直移动量分别由x、y或point、sizevoid OffsetRect( POINT point ); 的两个成员来指定 void OffsetRect( SIZE size );,13,2.4、画笔和画刷画笔是Windows应用程序中用来绘制各种直线和曲线的一种图形工具,它可分为修饰画笔和几何画笔两种类型。
在这两种类型中,几何画笔的定义最复杂,它不但有修饰画笔的属性,而且还跟画刷的样式、阴影线类型有关,通常用在对绘图有较高要求的场合。
而修饰画笔只有简单的几种属性,通常用在简单的直线和曲线等场合。
一个修饰画笔通常具有宽度、风格和颜色三种属性。
画笔的宽度用来确定所画的线条宽度,它是用设备单位表示的。
默认的画笔宽度是一个像素单位。
画笔的颜色确定了所画的线条颜色。
画笔的风格确定了所绘图形的线型,它通常有实线、虚线、点线、点划线、双点划线、不可见线和内框线等七种风格。
画刷用于指定填充的特性,许多窗口、控件以及其他区域都需要用画刷进行填充绘制,它比画笔的内容更加丰富。
画刷的属性通常包括填充色、填充图案和填充样式三种。
画刷的填充色和画笔颜色一样,都是使用COLORREF颜色类型,画刷的填充图案通常是用户定义的8 x 8位图,而填充样式往往是CDC内部定义的一些特性,它们都是以HS_为前缀的标识。
3、图像处理3.1、使用的CDC类的位图函数来输出图像。
BOOL StretchBit(int x,int y,int nWidth,int nHeight,CDC* pSrcDC,int xSrc,int ySrc,int nSrcWidth,intnSrcHeight,DWORD dwRop);x,y :表示目标矩形区域左上角的x,y坐标点;nWidth,nHeight:表示目标设备中绘制位图的宽度和高度;pSrcDC :表示源设备上下文对象指针;xSrc,ySrc:表示源设备上下文的起点x,y轴坐标;nSrcWidth,nSrcHeight:表示需要复制的位图宽度和高度;dwRop:表示光栅操作代码。
COLORREF GetPixel( int x, int y ) const; //返回坐标点的颜色值。
COLORREF SetPixel( int x, int y, COLORREF crColor ); //设置的颜色值BYTE GetRValue(DWORD rgb ); //获取一个颜色值的RGB各个分量:BYTE GetGValue(DWORD rgb );BYTE GetBValue(DWORD rgb );3.2、获取鼠标位置的颜色值获取某一点的颜色只要得到当前鼠标的设备环境CDC类对象即可,因为调用CDC类的GetPixel方法可获取某一点的颜色值。