版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、普通高等教育“十一五”国家级规划教材“十二五”普通高等教育本科国家级规划教材赵英良等.软件开发技术基础(第2版). 机械工业出版社第第6章章 多媒体编程技术多媒体编程技术西安交通大学计算机教学实验中心http:/西安交通大学计算机教学实验中心本章内容多媒体编程基础音频的播放与处理图像处理动态图像2西安交通大学计算机教学实验中心6.1多媒体编程基础媒体控制接口MCIActivex技术简介DirectX技术简介3西安交通大学计算机教学实验中心6.1.1 媒体控制接口MCIMCI(Media Control Interface,媒体控制接口)是Windows提供的与设备无关的多媒体高层次命令接口,可
2、以控制CD声音、视频动画、Wave格式数字声音、MIDI音序器、录像机和激光视盘机等多种设备。4西安交通大学计算机教学实验中心5西安交通大学计算机教学实验中心MCI设备类型设备类型设备类型描述描述Cdaudio激光唱机、CD-ROMDat数字化磁带音频播放机Digitalvideo窗口中的数字视频(非GUI)Mmmovie多媒体影片演播器Overlay叠加设备(窗口中的模拟视频)Scanner图像扫描仪器Vcr磁带录像机或播放机Videodisc影碟机Waveaudio播放数字化波形文件的音频设备Other未定义的MCI设备6西安交通大学计算机教学实验中心Windows提供的MCI设备驱动程序
3、设备类型设备类型设备驱动程序设备驱动程序名名描述描述cdaudioMCICDA.DRV一个播放光盘音频的MCI设备驱动程序mmmovieMCIMMP.DRV一个播放多媒体影片文件的MCI设备驱动程序sequencer MCISEQ.DRV一个播放MIDI音频文件的MCI设备驱动程序videodiscMCIPIONR.DRV一个播放先锋LD-V4200影碟机文件的MCI设备驱动程序waveaudio MCIWAVE.DRV一个播放和记录波形音频文件的MCI设备驱动程序otherMCIAVI.DRV一个播放AVI动态视频文件的MCI设备驱动程序7西安交通大学计算机教学实验中心6.1.2 Activ
4、ex技术简介ActiveX是微软提出的一种可以使不同语言开发的软件构件在网络环境中相互操作的标准。ActiveX包括控件控件(Controls)(Controls)、文档、文档(Documents)(Documents)、脚本、脚本(Scripts)(Scripts)三种最常用的技术,三种最常用的技术,同时它也包括客户机技术、服务器技术以及工同时它也包括客户机技术、服务器技术以及工具和应用程序具和应用程序8西安交通大学计算机教学实验中心6.1.3 DirectX技术简介DirectX是Microsoft公司最早为Windows 95平台所提供的一套支持多媒体运行的程序库与应用程序接口的总称,其
5、特点是直接对HAL (硬件抽象层)操作,实现视频、声音的输出,网络通信及对游戏杆的控制。与传统的Windows上的GDI或MCI相比,它加快了速度,提高了便利性。9西安交通大学计算机教学实验中心6.2 音频的播放与处理MCI提供控制音频的方法MCI由Windows提供的mmsystem.h文件定义。Windows采用两种MCI接口与MCI设备通信:一是使用命令消息接口函数,直接控制一是使用命令消息接口函数,直接控制MCIMCI设设备;备;二是使用命令字符串接口函数,基于文本接口二是使用命令字符串接口函数,基于文本接口或命令脚本来控制或命令脚本来控制MCIMCI设备。设备。不同之处在于它们的基本
6、命令结构以及将消息发送到设备的原理不同。10西安交通大学计算机教学实验中心6.2.1 命令消息接口命令消息接口命令消息接口使用消息控制MCI设备Windows多媒体扩充软件为使用命令消息接口发送MCI命令提供3个函数:MciSendCommandMciSendCommand:发送一个命令消息到一个:发送一个命令消息到一个MCIMCI设备;设备;MciGetDeviceIDMciGetDeviceID:当设备打开时,返回这个设:当设备打开时,返回这个设备的备的IDID号;号;MciGetErrorStringMciGetErrorString:返回错误代码的字符串。:返回错误代码的字符串。11西
7、安交通大学计算机教学实验中心1发送命令消息发送命令消息MciSendCommand的语法如下:MCIERROR MCIERROR mciSendCommand(MCIDEVICEIDmciSendCommand(MCIDEVICEID IDDeviceIDDevice, , UINT UINT uMsguMsg, DWORD , DWORD fdwCommandfdwCommand, DWORD , DWORD dwParamdwParam););12西安交通大学计算机教学实验中心2MCI命令消息的分类命令消息的分类MCI命令消息可以划分为以下几类:直接由MCI解释的命令、由所有的MCI设备所
8、支持的命令、基本命令和扩展命令。所有的MCI设备支持的命令消息:13消息消息描述描述MCI_CLOSE关闭一个关闭一个MCI设备设备MCI_GETDEVACPS 获得一个获得一个MCI设备的性能设备的性能MCI_INFO从一个从一个MCI设备中得到有关的消息设备中得到有关的消息MCI_OPEN初始化一个初始化一个MCI设备设备MCI_STATUS从一个从一个MCI设备返回有关的状态消息设备返回有关的状态消息西安交通大学计算机教学实验中心基本命令消息消息描述描述MCI_LOAD从一个磁盘文件加载数据从一个磁盘文件加载数据MCI_PAUSE暂停播放或记录暂停播放或记录MCI_PLAY开始传送输出数
9、据开始传送输出数据MCI_RECORD开始传送输入数据开始传送输入数据MCI_RESUME重新开始播放或记录重新开始播放或记录MCI_SAVE将数据存储到磁盘文件中将数据存储到磁盘文件中MCI_SEEK向前或向后检索向前或向后检索MCI_SET设置设备信息设置设备信息MCI_STATUS从一个从一个MCI设备返回有关的状态信息设备返回有关的状态信息MCI_STOP停止播放或记录停止播放或记录14西安交通大学计算机教学实验中心3MCI设备的打开设备的打开使用MCI设备前,必须使用MCI_OPEN命令消息来初始化设备。MCI_OPEN 命令对应的参数结构为:typedeftypedef struc
10、tstruct DWORD_PTR DWORD_PTR dwCallbackdwCallback; ; /低字节为低字节为MCI_NOTIFYMCI_NOTIFY标志存放了指定的窗口句柄标志存放了指定的窗口句柄 MCIDEVICEID MCIDEVICEID wDeviceIDwDeviceID; /; /返回给调用程序的返回给调用程序的IDID号号 LPCSTR LPCSTR lpstrDeviceTypelpstrDeviceType; /; /要打开的设备名要打开的设备名 LPCSTR LPCSTR lpstrElementNamelpstrElementName; /; /附加的设备元
11、素名附加的设备元素名 LPCSTR LPCSTR lpstrAliaslpstrAlias; /; /可选的设备别名可选的设备别名 MCI_OPEN_PARMS; MCI_OPEN_PARMS; 15西安交通大学计算机教学实验中心(1)用MCI设备驱动程序名指定待打开的MCI设备用设备驱动程序名打开一个波形音频设备:WORD WORD DeviceIDDeviceID; /; /声明设备号变量声明设备号变量MCI_OPEN_PARMS MCI_OPEN_PARMS MciOpenParmsMciOpenParms; /; /声明打开参数的结构体变声明打开参数的结构体变量量MciOpenParm
12、s.IpstrDeviceTypeMciOpenParms.IpstrDeviceType=”=”mciwave.drvmciwave.drv”;/”;/指定设备指定设备if(if(MciSendCommandMciSendCommand(0,MCI_OPEN, MCI_OPEN_TYPE, (0,MCI_OPEN, MCI_OPEN_TYPE, (DWORD)(LPVOID)& (DWORD)(LPVOID)& MciOpenParmsMciOpenParms) / /打开设备失败打开设备失败else /else /打开设备成功打开设备成功 DeviceIDDeviceID=
13、 =MciOpenParms.MciOpenParms.wDeviceIDwDeviceID 16西安交通大学计算机教学实验中心(2)用设备类型常数指定待打开的MCI设备Windows MCI接口为每种类型的MCI设备定义了一个设备类型常数,应用程序可以使用此常数指定待打开的设备。可以在MCI_OPEN_PARMS的LpstrDeviceType域中指定此常数,并用设备MCI_OPEN_TYPE和MCI_OPEN_TYPE_ID指定待打开的设备,此时LpstrDeviceType为一个DWORD域,其低字节部分用来指定设备常数,高字节是 的顺序索引号.17西安交通大学计算机教学实验中心设备类型
14、及常数设备类型设备类型常数常数animationMCI_DEVTYPE_ANIMATIONcdaudioMCI_DEVTYPE_CD_AUDIOdatMCI_DEVTYPE_DATdigitalvideoMCI_DEVTYPE_DIGITAL_VIDEOotherMCI_DEVTYPE_OTHERoverlayMCI_DEVTYPE_OVERLAYscannerMCI_DEVTYPE_SCANNERvcrMCI_DEVTYPE_VIDEOTAPEsequencerMCI_DEVTYPE_SEQUENCERvideodiscMCI_DEVTYPE_VIDEODISCwaveaudioMCI_DE
15、TTYPE_MAVEFORM_AUDIO18西安交通大学计算机教学实验中心4常用命令消息常用命令消息(1)MCI_PLAY命令消息MCI_PLAY命令消息通知设备开始传送输出数据。MCI_PLAY命令的对应参数结构为:typedeftypedef structstruct DWORD_PTR DWORD_PTR dwCallbackdwCallback; /; /低字节存放低字节存放MCI_NOTIFYMCI_NOTIFY使用的窗口句柄使用的窗口句柄 DWORD DWORD dwFromdwFrom; /; /开始播放的位置开始播放的位置 DWORD DWORD dwTodwTo; /; /播
16、放结束的位置播放结束的位置 MCI_PLAY_PARMS; MCI_PLAY_PARMS;MCI_PLAY常用的标志有:MCI_FROM,MCI_TO,MCI_DGV_PLAY_REPEAT等19西安交通大学计算机教学实验中心(2)MCI_SET命令消息MCI_SET设置设备信息。MCI_SET命令的对应参数结构为typedeftypedef structstruct DWORD_PTR DWORD_PTR dwCallbackdwCallback; / /; / /低字节存放低字节存放MCI_NOTIFYMCI_NOTIFY使用的窗使用的窗口句柄口句柄 DWORD DWORD dwTimeF
17、ormatdwTimeFormat; /; /设备的时间格式设备的时间格式 DWORD DWORD dwAudiodwAudio; /; /音频输出通道音频输出通道 MCI_SET_PARMS; MCI_SET_PARMS;MCI_SET常用的标志有:MCI_SET_AUDIOMCI_SET_AUDIO,表示音频通道号包含在参数结构中;,表示音频通道号包含在参数结构中; MCI_SET_TIME_FORMATMCI_SET_TIME_FORMAT,时间格式参数包含在参数结构中;,时间格式参数包含在参数结构中;20西安交通大学计算机教学实验中心5关闭一个设备关闭一个设备MCI_CLOSE命令消息
18、取消对一个设备或者设备元素的访问,它类似于一个文件的关闭操作。当所有使用一个设备的任务均关闭了这个设备时,MCI释放这个设备。MCI_CLOSE的参数结构typedeftypedef structstruct DWORD_PTR DWORD_PTR dwCallbackdwCallback; /; /低字节存放低字节存放MCI_NOTIFYMCI_NOTIFY使用的窗口句柄使用的窗口句柄 MCI_GENERIC_PARMS; MCI_GENERIC_PARMS;21西安交通大学计算机教学实验中心播放声音文件【例6-1】 使用命令消息接口函数播放特定WAV声音文件“e:01.wav”。解题思路:
19、解题思路:包含头文件包含头文件 和和 ;加载多媒体编程库文件加载多媒体编程库文件# #pragmapragma comment(libcomment(lib, , winmmwinmm);声明打开设备消息参数结构体变量;声明打开设备消息参数结构体变量;填充参数;填充参数;使用使用mciSendCommandmciSendCommand和和MCI_OPENMCI_OPEN命令消息打开设备;命令消息打开设备;声明播放设备消息参数结构体变量;声明播放设备消息参数结构体变量;使用使用mciSendCommandmciSendCommand和和MCI_PLAYMCI_PLAY命令消息播放设备;命令消息播
20、放设备;进入循环等待播放。进入循环等待播放。22西安交通大学计算机教学实验中心思考题(1)如何使程序可以播放任意从键盘输出的文件?(2)查找资料,考虑如何控制播放过程的暂停、继续和从头播放?23西安交通大学计算机教学实验中心6.2.2 命令字符串接口命令字符串接口使用文本命令控制MCI设备。文本串中包含执行一个命令所需的所有信息。基于字符串的命令,把控制命令连接在一起,然后通过mciSendString函数提交给MCI。Windows多媒体扩充软件为使用命令字符串接口传送命令字符串提供了3个函数: mciSendStringmciSendString、mciGetErrorStringmciG
21、etErrorString、mciExecutemciExecute。24西安交通大学计算机教学实验中心1mciExecutemciExcute函数是mciSendString的简化形式语法定义如下:BOOL BOOL mciExecutemciExecute ( (LpstrLpstr Command) Command)LpstrCommandLpstrCommand是一个指向以是一个指向以NULLNULL结束的控制命结束的控制命令的字符串,字符格式与令的字符串,字符格式与mciSendStringmciSendString相同。相同。若函数调用功能,返回若函数调用功能,返回TRUETRUE
22、,否则返回,否则返回FALSEFALSE。25西安交通大学计算机教学实验中心2mciGetErrorString函数函数mciGetErrorString函数返回一个MCI错误代码的文本描述字符串,其语法如下:WORD WORD mciGetErrorStringmciGetErrorString (DWORD (DWORD ErrorError, , LpstrLpstr BufferBuffer, WORD , WORD LengthLength) )3mciSendString函数命令字符串接口函数命令字符串接口函数mciSendStringmciSendString的原形如的原形如下:
23、下:MCIERROR MCIERROR mciSendString(LPCTSTRmciSendString(LPCTSTR lpszCommandlpszCommand, , LPTSTR LPTSTR lpszReturnStringlpszReturnString, UINT , UINT cchReturncchReturn, , HANDLE HANDLE hwndCallbackhwndCallback) )26西安交通大学计算机教学实验中心使用命令字符串播放声音文件【例6-2】 使用命令字符串接口函数播放E盘上的“01.mp3”文件。解题思路:解题思路:包含头文件包含头文件 和和
24、 ;加载多媒体编程库文件加载多媒体编程库文件# #pragmapragma comment(libcomment(lib, , winmmwinmm);使用使用mciSendStringmciSendString函数和函数和playplay命令字符串命令字符串播放文件;播放文件;进入循环等待播放。进入循环等待播放。27西安交通大学计算机教学实验中心提示与思考(1)mciSendString函数的后三个参数通常可以设置为NUll、0和NULL。(2)暂停播放的命令字符串可写为:pause e:01.mp3,继续播放的命令字符串可写为:resume e:01.mp3,停止播放的命令字符串可写为:s
25、top e:01.mp3。请扩充该程序的功能。28西安交通大学计算机教学实验中心6.2.3 Wave文件结构声音的处理最终是对声音数据的处理。声音数据以某种格式存放在计算机存储器中。RIFF(Resource Interchange File Format资源互换文件格式)是Microsoft公司定义的一种用于管理Windows环境中多媒体数据的文件格式。波形音频Wave、MDI和数字视频Avi文件都采用这种格式存储。29西安交通大学计算机教学实验中心RIFF文件结构RIFF文件基本构成是称为“块”(Chunk)的单元,每个块由“ID”、“数据大小”及“数据”3部分所组成ID为4个字符所组成的
26、代码,如RIFF,LIST等,指定块的标志ID;数据大小用来指定块的数据域大小,占用4个字节;数据用来描述具体的声音信号,它可以由若干个子块构成,一般情况下,块与块是平行的,不能相互嵌套30ID,4字节数据大小,4字节数 据西安交通大学计算机教学实验中心WAVE文件的格式类型为“WAVE”。RIFF块包含两个子块:这两个子块的ID分别是“fmt”和“data”,其中fmt子块由结构WAVEFORMATEX所组成,其子块的大小就是sizeof(WAVEFORMATEX),数据组成就是WAVEFORMATEX结构中的数据31西安交通大学计算机教学实验中心WAVE文件结构32LIST块(块(4) L
27、IST数据块大小(数据块大小(4)LIST数据数据西安交通大学计算机教学实验中心WAVE文件结构实例RIFF 0 x00013bd0-80848Fmt 0 x00000010-16Data 0 x00013b7c-80764LIST 0 x00000028-404*7=2888085633西安交通大学计算机教学实验中心34西安交通大学计算机教学实验中心6.2.4 音效处理读出wave文件,处理后存为新的文件1 1文件打开函数文件打开函数mmioOpenmmioOpen,原型为:,原型为:HMMIO HMMIO mmioOpenmmioOpen( LPSTR ( LPSTR szFilename
28、szFilename, LPMMIOINFO , LPMMIOINFO lpmmioinfolpmmioinfo, DWORD , DWORD dwOpenFlagsdwOpenFlags););2 2读文件函数读文件函数mmioReadmmioRead,原型为:,原型为: LONG LONG mmioReadmmioRead( HMMIO ( HMMIO hmmiohmmio, HPSTR , HPSTR pchpch, , LONG LONG cchcch ); );35西安交通大学计算机教学实验中心3 3文件定位函数文件定位函数mmioSeekmmioSeek,该函数改变当前文件,该函数
29、改变当前文件的指针,原型为:的指针,原型为:LONG LONG mmioSeekmmioSeek( HMMIO ( HMMIO hmmiohmmio, LONG , LONG lOffsetlOffset, , intint iOriginiOrigin ); );4 4文件写入函数文件写入函数 mmioWritemmioWrite,函数原型为:,函数原型为:LONG LONG mmioWritemmioWrite( HMMIO ( HMMIO hmmiohmmio, char _huge, char _huge* * p p5 5文件关闭函数文件关闭函数mmioClosemmioClose,
30、原型为,原型为MMRESULT MMRESULT mmioClosemmioClose( HMMIO ( HMMIO hmmiohmmio, UINT , UINT wFlagswFlags ); );chch, LONG , LONG cchcch ); );36西安交通大学计算机教学实验中心声音反转【例6-3】 打开E盘中名为02.wav的WAVE音频文件,反转其中音频的数据,写入另一个新的WAVE格式的文件去。解题思路:解题思路:以读写方式打开以读写方式打开e:02.wave:02.wav文件;文件; 定位文件各部分,读取文件的类型、采样频率、定位文件各部分,读取文件的类型、采样频率、样
31、本位数、声道数、数据区大小等参数;样本位数、声道数、数据区大小等参数; 读入声音数据到一个内存缓冲区中;读入声音数据到一个内存缓冲区中;反转其中的数据,类似与字符串的反转;反转其中的数据,类似与字符串的反转;以创建和读写方式打开文件以创建和读写方式打开文件02_new.wav02_new.wav将文件类型、格式参数、音频数据写回硬盘,文将文件类型、格式参数、音频数据写回硬盘,文件符合件符合WAVEWAVE格式标准。格式标准。37西安交通大学计算机教学实验中心分析程序打开WAV文件,读取数据到缓冲区,处理完数据后写回磁盘。可以用标准的C+输入输出流处理文件,本程序使用API提供的一组输入输出函数
32、来完成此操作,这些函数均以mmio开头,提供针对WAVE文件的操作,可以简化编程。除了反转外,还可以对数据进行低通滤波、高通滤波及淡入淡出等处理。只需用相应的算法替换例3中相应的代码即可。思考题思考题:(1 1)如何处理)如何处理8 8位或位或3232位的声音数据?位的声音数据?(2 2)考虑对声音进行其他一些简单的效果处理,如增大音量。)考虑对声音进行其他一些简单的效果处理,如增大音量。38西安交通大学计算机教学实验中心6.3 图像处理使用Windows GDI绘制图形位图的显示BMP位图文件的操作39西安交通大学计算机教学实验中心6.3.1 使用Windows GDI绘制图形在Window
33、s程序中,应用程序(包括Windows本身)的输出并不直接面向物理的设备,而是针对一个称之为(Device Context)的逻辑设备进行操作。设备环境包含了关于当前选定用于一种设备的画笔、画刷、字体和位图等信息,设备环境与实际设备之间的信息传送由Windows直接管理。MFC提供了用于若干不同类型的设备环境的类,应用程序在将任何东西画到设备中去之前,必须明确索取一个设备环境。 40西安交通大学计算机教学实验中心GDI设备环境广泛地用于图形设备接口(Graphics Device Interface,GDI)中。GDI是Windows体系结构的一个主要组件,是在Windows平台上处理图形、图
34、像的方法,负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。GDI使程序员毋须关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出。41西安交通大学计算机教学实验中心在MFC应用中绘图CDC在MFC应用程序中,所有的绘制调用均通过相应的设备环境对象实现。在MFC类库中,用CDC类封装设备环境对象,并提供了在显示器、打印机或窗口的客户程序区域上画图的方法。所有图形的输出都可以使用CDC类提供方法来进行-对颜色进行操作、坐标映射和转换,对多边形和区域进行操作,绘制各种形状,绘制文本,处理字体等。 42西安交通大学计算机教学实验中心CPaintDCCPaintD
35、C类是从CDC类派生的设备环境类。CPaintDC类的对象在OnPaint( )函数中使用,用于在窗口中绘图。CClientDC类也是常用的CDC派生类,用于在OnPaint( )函数外访问设备环境,提供对窗口客户区域的图形访问。另外,CDC还直接派生了两个类,CWindowDCCWindowDC类提供对整个窗口的图形访问;类提供对整个窗口的图形访问;CMetaFileDCCMetaFileDC类用于操作类用于操作WindowsWindows元文件元文件, ,创建独立于设创建独立于设备的文件。备的文件。43西安交通大学计算机教学实验中心MFC中的绘图工具对象画笔、画刷、字体、位图等。封装在MF
36、C图形对象类由CGdiObject基类派生而来CPen、CBrush、CFONT等。44西安交通大学计算机教学实验中心1.选择画笔画笔是用来画线的工具,是CPen类的对象。/声明画笔对象声明画笔对象,并创建宽度为,并创建宽度为3 3的红色实线笔的红色实线笔 CPen penRed(PS_SOLID, 3, RGB(255, 0, 0);/ / 使用新的画笔使用新的画笔,保存原来的画笔以便恢复,保存原来的画笔以便恢复 Cpen*pOldPen=pDC-SelectObject(&penRed);/ / 恢复原来的画笔恢复原来的画笔 pDC-SelectObject(pOldPen);45
37、西安交通大学计算机教学实验中心线型Value Meaning PS_SOLID The pen is solid. PS_DASH The pen is dashed. PS_DOT The pen is dotted. PS_DASHDOT The pen has alternating dashes and dots. PS_DASHDOTDOT The pen has dashes and double dots. PS_NULL The pen is invisible. PS_INSIDEFRAME 46西安交通大学计算机教学实验中心CDC:SelectObject()方法CDC:S
38、electObject()方法选定放入当前设备环境的新对象,并返回一个指向被替换对象的指针,因此,语句 pOldPenpOldPen = = pDCpDC-SelectObject(&penRedSelectObject(&penRed);); 保存了原来的画笔。保存并恢复原来画笔的原因是,每个图形设备接口对象要占用一个HDC句柄,而可用的句柄数量是有限的,在使用完后要及时释放。47西安交通大学计算机教学实验中心2.选择画刷CBrush画刷则用来填充区域的内部,是CBrush类的对象Windows将画刷分为两种,实心的和阴影的,创建函数不同/声明画刷对象CBrushCBrush
39、 brushBlue(RGB(0,255,0);/ brushBlue(RGB(0,255,0);/蓝色蓝色/创建画刷BOOL BOOL CreateSolidBrushCreateSolidBrush ( COLORREF ( COLORREF crColorcrColor ); / ); /创建实画刷创建实画刷BOOL BOOL CreateHatchBrushCreateHatchBrush ( ( intint nIndexnIndex, COLORREF , COLORREF crColorcrColor );/ );/创创建阴影风格的画刷建阴影风格的画刷brushBlue.Crea
40、teStockObjectbrushBlue.CreateStockObject (NULL_BRUSH); / (NULL_BRUSH); /透明画刷透明画刷 /选择画刷pDCpDC-SelectObjectSelectObject (& (&brushBluebrushBlue); ); 48西安交通大学计算机教学实验中心3.绘制图形(1)输出文字BOOL BOOL TextOutTextOut(int(int x, x, intint y, const y, const CStringCString & &strstr););在屏幕上在屏幕上( (x,yx
41、,y) )处,输出文字处,输出文字strstr。其中。其中strstr是是CStringCString类型的字符串对象,如:类型的字符串对象,如: CStringCString strstr=”=”软件开发技术基础软件开发技术基础”;49西安交通大学计算机教学实验中心(2)画点COLORREF COLORREF SetPixelSetPixel ( (intint x, x, intint y, COLORREF y, COLORREF color);color);该函数在指定坐标(参数该函数在指定坐标(参数x x,y y)处按给定颜色)处按给定颜色colorcolor画点,返回值为原来此坐标
42、处的颜色。画点,返回值为原来此坐标处的颜色。50西安交通大学计算机教学实验中心(3)画线画线工作需经两步完成:首先确定线的起始端位置,这可通过调用成员函数MoveTo完成,其原型为: CPointCPoint MoveToMoveTo ( ( intint x, x, intint y ); y );MoveTo将绘图位置移至指定坐标处,并返回移动前的绘图位置。确定了线的起点后,即可使用成员函数LineTo画线: BOOL LineTo ( int x, int y );51西安交通大学计算机教学实验中心(4)绘制矩形绘制矩形的成员函数为:绘制矩形的成员函数为:BOOL BOOL Rectan
43、gle(intRectangle(int x1,int y1,int x2, x1,int y1,int x2, intint y2 ); y2 );(5)绘制椭圆绘制椭圆成员函数的原型为:绘制椭圆成员函数的原型为:BOOL BOOL Ellipse(intEllipse(int x1, x1, intint y1, y1, intint x2, x2, intint y2 ); y2 ); 其参数为需要绘制的矩形的左上角坐标其参数为需要绘制的矩形的左上角坐标(x1, y1x1, y1)和右下角坐标()和右下角坐标(x2, y2x2, y2)。)。52西安交通大学计算机教学实验中心其他的绘图函
44、数还有:Arc() Arc() 绘制圆弧绘制圆弧 Draw3Drect() Draw3Drect() 绘制三维矩形绘制三维矩形FillRectFillRect()()用给定的的画刷填充矩形区域用给定的的画刷填充矩形区域Pie()Pie()绘制饼块图绘制饼块图Polygon()Polygon()绘制多边形绘制多边形SetBkColorSetBkColor设置背景颜色设置背景颜色SetTextColorSetTextColor设置文本颜色设置文本颜色53西安交通大学计算机教学实验中心MFC绘图【例6-4】 练习MFC使用绘图函数,在窗口中随机画出直线和其它形状的图形。解题思路解题思路:建立建立MF
45、CMFC框架程序,在框架程序,在OnDrawOnDraw中写出相应的绘中写出相应的绘图代码即可图代码即可绘制图形的一般过程是:创建画笔(绘制图形的一般过程是:创建画笔(CPenCPen),),创建画刷(创建画刷(CBrushCBrush),选择画笔,选择画刷,),选择画笔,选择画刷,绘制图形,然后恢复原来的画刷和画笔。也可绘制图形,然后恢复原来的画刷和画笔。也可以使用缺省的画刷和画笔直接绘制图形。以使用缺省的画刷和画笔直接绘制图形。54西安交通大学计算机教学实验中心操作步骤操作步骤:新建一个单文档新建一个单文档MFCMFC程序,项目名称为程序,项目名称为mm064mm064,其余设置不变。其余
46、设置不变。 工作区(工作区(WorkspaceWorkspace)窗口中的类视图中,)窗口中的类视图中,展开展开CMm064ViewCMm064View类(简称类(简称ViewView或视图类),双或视图类),双击击OnDrawOnDraw函数,在该函数中添加代码。函数,在该函数中添加代码。55西安交通大学计算机教学实验中心绘制统计直方图【例6-5】 设有一个班级的考试成绩中,90以上、80、70、60和不及格各档次的人数分别为3、8、12、5、2。请编程画出各档次成绩统计的直方图。解题思路解题思路:直方图可以通过矩形函数实现,使用画刷填充不同的直方图可以通过矩形函数实现,使用画刷填充不同的颜
47、色,也可以选择随机色。坐标轴用直线函数绘制。颜色,也可以选择随机色。坐标轴用直线函数绘制。实际上,本题的关键是确定绘图的坐标。可以假设窗实际上,本题的关键是确定绘图的坐标。可以假设窗口不小于口不小于400400* *400400,直方图矩形最大高度为,直方图矩形最大高度为200200,其他,其他可以根据人数的比例确定,宽度为可以根据人数的比例确定,宽度为6060,矩形间隔,矩形间隔5 5。横。横轴从(轴从(2020,300300)到()到(400400,300300),横轴下方要书写文),横轴下方要书写文字标注。具体计算公式请分析写面的程序。字标注。具体计算公式请分析写面的程序。56西安交通大
48、学计算机教学实验中心操作步骤操作步骤:新建一个单文档新建一个单文档MFC程序,项目名称为程序,项目名称为mm065,其余设置不变。,其余设置不变。 工作区(工作区(Workspace)窗口中的类视图中,)窗口中的类视图中,展开展开CMm065View类(简称类(简称View或视图类),或视图类),双击双击OnDraw函数,在该函数中添加代码。函数,在该函数中添加代码。在视图类的开始处包含以下头文件。在视图类的开始处包含以下头文件。#include /支持支持Rand函数函数#include /支持时间函数支持时间函数57西安交通大学计算机教学实验中心6.3.2位图的显示位图在Windows程序
49、里被当作一种资源。资源是Windows应用程序在运行时用到的一些数据,如菜单、加速键、位图、图表、光标、对话框、字符串等。一般情况下,资源数据保留在硬盘上的可执行文件中。当应用程序创建窗口、显示对话框或位图时,才从硬盘的EXE或DLL文件中读取相应的资源数据。一个项目在一个扩展名为.rc的文件中定义资源,资源文件通常与项目同名。位图信息可以放在一个CBitmap类的对象中58西安交通大学计算机教学实验中心1添加位图资源新建一个单文档新建一个单文档MFCMFC程序。程序。在工作区中切换到资源视图(在工作区中切换到资源视图(ResourceViewResourceView)中,在菜单中选择中,在菜
50、单中选择“Insert-ResourceInsert-Resource”。在弹出的对话框中选择在弹出的对话框中选择BitmapBitmap,然后单击,然后单击【ImportImport】按钮,导入一幅按钮,导入一幅BMPBMP位图。位图的位图。位图的IDID号使用号使用IDB_BITMAP1IDB_BITMAP1。IDID号可以修改号可以修改59西安交通大学计算机教学实验中心2 2添加位图对象添加位图对象在在ViewView类中添加类中添加CBitmapCBitmap类的一个对象作为数类的一个对象作为数据成员。据成员。CBitmapCBitmap m_Bitmapm_Bitmap; ;3 3使
51、用使用LoadBitmapLoadBitmap载入位图资源函数载入位图资源函数BOOL BOOL LoadBitmapLoadBitmap( LPCTSTR ( LPCTSTR lpszResourceNamelpszResourceName ); ); BOOL BOOL LoadBitmapLoadBitmap( UINT ( UINT nIDResourcenIDResource ); );其中参数其中参数lpszResourceNamelpszResourceName和和nIDResourcenIDResource分别为资源分别为资源名称和标识符名称和标识符60西安交通大学计算机教学实
52、验中心4读位图信息函数GetBitmapint GetBitmap( BITMAP* pBitMap );其中参数其中参数pBitMappBitMap为一为一BITMAPBITMAP结构体对象的地址。结构体对象的地址。BITMAPBITMAP结构体类型用于存放位图有关信息,结构如下:结构体类型用于存放位图有关信息,结构如下:typedeftypedef structstruct tagBITMAPtagBITMAP intint bmTypebmType; ; intint bmWidthbmWidth; ; intint bmHeightbmHeight; ; intint bmWidthB
53、ytesbmWidthBytes; ; BYTE BYTE bmPlanesbmPlanes; ; BYTE BYTE bmBitsPixelbmBitsPixel; ; LPVOID LPVOID bmBitsbmBits; ; BITMAP; BITMAP;61西安交通大学计算机教学实验中心5 5建立一合适的内存设备环境建立一合适的内存设备环境CDC CDC MemDCMemDC; ;MemDCMemDC. . CreateCompatibleDC(NULLCreateCompatibleDC(NULL););6 6将位图选入该设备环境:将位图选入该设备环境:MemDC.SelectObj
54、ect(&m_BitmapMemDC.SelectObject(&m_Bitmap););其中其中m_Bitmapm_Bitmap是是CBitmapCBitmap类的对象。类的对象。62西安交通大学计算机教学实验中心 7将位图从内存设备环境 复制到指定设备使用CDC类的BitBlt( )成员函数从内存设备环境中将位图复制到指定设备(如窗口或打印机)。BitBlt( )函数的原型为:BOOL BOOL BitBltBitBlt ( ( intint x, x, intint y, y, intint nWidthnWidth, , intint nHeightnHeight, C
55、DC, CDC* * pSrcDC,pSrcDC,intint xSrcxSrc, , intint ySrcySrc, DWORD , DWORD dwRopdwRop ); );63西安交通大学计算机教学实验中心在窗口中显示一幅位图【例6-6】 在窗口中显示一幅位图,设位图的文件名为flower.bmp。解题思路解题思路:创建单文档创建单文档MFCMFC工程,添加位图资源,在工程,添加位图资源,在ViewView类类OnDrawOnDraw成员函数中按步骤编程。成员函数中按步骤编程。64西安交通大学计算机教学实验中心思考题 位图显示的基本过程是在视图类的构造函数中载入位图显示的基本过程是在
56、视图类的构造函数中载入位图资源并取得其宽度和高度数据。在位图资源并取得其宽度和高度数据。在OnDrawOnDraw( )( )函数函数中,首先建立一内存设备环境并选入已装载的位图资中,首先建立一内存设备环境并选入已装载的位图资源,然后使用源,然后使用BitBltBitBlt( )( )函数将位图显示在窗口的客户函数将位图显示在窗口的客户区。请尝试显示位图的部分区域。区。请尝试显示位图的部分区域。 CDC CDC类的成员函数类的成员函数StretchBltStretchBlt( )( )也可用来显示位也可用来显示位图资源。其原型为:图资源。其原型为:BOOL BOOL StretchBltStr
57、etchBlt( ( intint x, x, intint y, y, intint nWidthnWidth, , intint nHeightnHeight, CDC, CDC* * pSrcDCpSrcDC, , intint xSrcxSrc, , intint ySrcySrc, , intint nSrcWidthnSrcWidth, , intint nSrcHeightnSrcHeight, , DWORD DWORD dwRopdwRop ); );65西安交通大学计算机教学实验中心BITMAP Structuretypedef struct tagBITMAP /* bm
58、 */ int bmType; int bmWidth; int bmHeight; int bmWidthBytes; BYTE bmPlanes; BYTE bmBitsPixel; LPVOID bmBits; BITMAP; 66西安交通大学计算机教学实验中心6.3.3 BMP位图文件的操作如果需要在自己的程序中对位图作几何处理或效果处理,则需要了解位图的文件结构,将位图数据读入内存,对数据进行计算后,再将数据以规定的格式写到磁盘上67西安交通大学计算机教学实验中心1位图文件的结构BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成.BMPBMP文件由文件由文件头文件头、位图信
59、息头、颜色信息和、位图信息头、颜色信息和图形数据四部分组成图形数据四部分组成 (BITMAPFILEHEADER )(BITMAPFILEHEADER )BMPBMP文件头数据结构含有文件头数据结构含有BMPBMP文件的类型、文件大小文件的类型、文件大小和位图起始位置等信息和位图起始位置等信息位图信息图头位图信息图头, ,用于说明位图的尺寸等信息用于说明位图的尺寸等信息 信息头之后是信息头之后是颜色颜色表用于说明位图中的颜色(表用于说明位图中的颜色(2424位位位图没有颜色表),它有若干个表项,每一个表项位图没有颜色表),它有若干个表项,每一个表项是一个是一个RGBQUADRGBQUAD类型的
60、结构,定义一种颜色类型的结构,定义一种颜色68西安交通大学计算机教学实验中心数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上(倒放的) 69西安交通大学计算机教学实验中心(1)位图文件头typedef struct tagBITMAPFILEHEADERWORDbfType; /DWORD bfSize; /WORDbfReserved1; /WORDbfReserved2; /DWORD bfOffBits; / BITMAPFILEHEADER;70西安交通大学计算机教学实验中心(2)位图信息头typedef struct tagBITMAPINFOHEADERDWORD biSize; /LONG biWidth; /LONG bi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒吧生日派对策划服务承包合同(04版)
- 员工入职劳动合同
- 学生在校期间受伤赔偿协议书3篇
- 3d立体绘画课件
- 空调安装合同协议书大全
- 工程项目总工程师2024年度合同
- 社区元旦活动策划方案案例
- 二零二四年太阳能光伏项目开发与投资合同
- 二零二四年金融投资合作协议2篇
- 宅基地买卖合同范本
- 2024中国华电集团限公司校招+社招高频难、易错点500题模拟试题附带答案详解
- 冷弯机安全操作规程有哪些(4篇)
- 2024年浙江省初中学业水平考试英语试卷真题(含答案详解)
- 小学道德与法治《中华民族一家亲》完整版课件部编版
- 2024中国铁路成都局集团限公司招聘6006人高校毕业生(一)高频500题难、易错点模拟试题附带答案详解
- 人工草坪铺设合同协议书
- 七年级上册道德与法治《3.1认识自己 》说课稿(2022课标)
- DL∕T 5372-2017 水电水利工程金属结构与机电设备安装安全技术规程
- 2024-2030年中国先进过程控制(APC)行业市场发展趋势与前景展望战略分析报告
- 产品材质渲染智慧树知到期末考试答案章节答案2024年浙江旅游职业学院
- 2024年广西应急厅事业单位笔试真题
评论
0/150
提交评论