版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 多媒体编程技术西安交通大学计算机教学实验中心http:/软件开发技术基础本章内容多媒体编程基础音频的播放与处理图像处理动态图像26.1多媒体编程基础媒体控制接口MCIActivex技术简介DirectX技术简介36.1.1 媒体控制接口MCIMCI(Media Control Interface,媒体控制接口)是Windows提供的与设备无关的多媒体高层次命令接口,可以控制CD声音、视频动画、Wave格式数字声音、MIDI音序器、录像机和激光视盘机等多种设备。45MCI设备类型设备类型描述Cdaudio激光唱机、CD-ROMDat数字化磁带音频播放机Digitalvideo窗口中的数字
2、视频(非GUI)Mmmovie多媒体影片演播器Overlay叠加设备(窗口中的模拟视频)Scanner图像扫描仪器Vcr磁带录像机或播放机Videodisc影碟机Waveaudio播放数字化波形文件的音频设备Other未定义的MCI设备6Windows提供的MCI设备驱动程序设备类型设备驱动程序名描述cdaudioMCICDA.DRV一个播放光盘音频的MCI设备驱动程序mmmovieMCIMMP.DRV一个播放多媒体影片文件的MCI设备驱动程序sequencerMCISEQ.DRV一个播放MIDI音频文件的MCI设备驱动程序videodiscMCIPIONR.DRV一个播放先锋LD-V4200
3、影碟机文件的MCI设备驱动程序waveaudioMCIWAVE.DRV一个播放和记录波形音频文件的MCI设备驱动程序otherMCIAVI.DRV一个播放AVI动态视频文件的MCI设备驱动程序76.1.2 Activex技术简介ActiveX是微软提出的一种可以使不同语言开发的软件构件在网络环境中相互操作的标准。ActiveX包括控件(Controls)、文档(Documents)、脚本(Scripts)三种最常用的技术,同时它也包括客户机技术、服务器技术以及工具和应用程序86.1.3 DirectX技术简介DirectX是Microsoft公司最早为Windows 95平台所提供的一套支持多
4、媒体运行的程序库与应用程序接口的总称,其特点是直接对HAL (硬件抽象层)操作,实现视频、声音的输出,网络通信及对游戏杆的控制。与传统的Windows上的GDI或MCI相比,它加快了速度,提高了便利性。96.2 音频的播放与处理MCI提供控制音频的方法MCI由Windows提供的mmsystem.h文件定义。Windows采用两种MCI接口与MCI设备通信:一是使用命令消息接口函数,直接控制MCI设备;二是使用命令字符串接口函数,基于文本接口或命令脚本来控制MCI设备。不同之处在于它们的基本命令结构以及将消息发送到设备的原理不同。106.2.1 命令消息接口命令消息接口使用消息控制MCI设备W
5、indows多媒体扩充软件为使用命令消息接口发送MCI命令提供3个函数:MciSendCommand:发送一个命令消息到一个MCI设备;MciGetDeviceID:当设备打开时,返回这个设备的ID号;MciGetErrorString:返回错误代码的字符串。111发送命令消息MciSendCommand的语法如下:MCIERROR mciSendCommand(MCIDEVICEID IDDevice, UINT uMsg, DWORD fdwCommand, DWORD dwParam);122MCI命令消息的分类MCI命令消息可以划分为以下几类:直接由MCI解释的命令、由所有的MCI设备
6、所支持的命令、基本命令和扩展命令。所有的MCI设备支持的命令消息:13消息描述MCI_CLOSE关闭一个MCI设备MCI_GETDEVACPS获得一个MCI设备的性能MCI_INFO从一个MCI设备中得到有关的消息MCI_OPEN初始化一个MCI设备MCI_STATUS从一个MCI设备返回有关的状态消息基本命令消息描述MCI_LOAD从一个磁盘文件加载数据MCI_PAUSE暂停播放或记录MCI_PLAY开始传送输出数据MCI_RECORD开始传送输入数据MCI_RESUME重新开始播放或记录MCI_SAVE将数据存储到磁盘文件中MCI_SEEK向前或向后检索MCI_SET设置设备信息MCI_S
7、TATUS从一个MCI设备返回有关的状态信息MCI_STOP停止播放或记录143MCI设备的打开使用MCI设备前,必须使用MCI_OPEN命令消息来初始化设备。MCI_OPEN 命令对应的参数结构为:typedef struct DWORD_PTR dwCallback; /低字节为MCI_NOTIFY标志存放了指定的窗口句柄 MCIDEVICEID wDeviceID; /返回给调用程序的ID号 LPCSTR lpstrDeviceType; /要打开的设备名 LPCSTR lpstrElementName; /附加的设备元素名 LPCSTR lpstrAlias; /可选的设备别名 MCI
8、_OPEN_PARMS; 15(1)用MCI设备驱动程序名指定待打开的MCI设备用设备驱动程序名打开一个波形音频设备:WORD DeviceID; /声明设备号变量MCI_OPEN_PARMS MciOpenParms; /声明打开参数的结构体变量MciOpenParms.IpstrDeviceType=”mciwave.drv”;/指定设备if(MciSendCommand(0,MCI_OPEN, MCI_OPEN_TYPE, (DWORD)(LPVOID)& MciOpenParms) /打开设备失败else /打开设备成功 DeviceID=MciOpenParms.wDeviceID
9、16(2)用设备类型常数指定待打开的MCI设备Windows MCI接口为每种类型的MCI设备定义了一个设备类型常数,应用程序可以使用此常数指定待打开的设备。可以在MCI_OPEN_PARMS的LpstrDeviceType域中指定此常数,并用设备MCI_OPEN_TYPE和MCI_OPEN_TYPE_ID指定待打开的设备,此时LpstrDeviceType为一个DWORD域,其低字节部分用来指定设备常数,高字节是 的顺序索引号.17设备类型及常数设备类型常数animationMCI_DEVTYPE_ANIMATIONcdaudioMCI_DEVTYPE_CD_AUDIOdatMCI_DEVT
10、YPE_DATdigitalvideoMCI_DEVTYPE_DIGITAL_VIDEOotherMCI_DEVTYPE_OTHERoverlayMCI_DEVTYPE_OVERLAYscannerMCI_DEVTYPE_SCANNERvcrMCI_DEVTYPE_VIDEOTAPEsequencerMCI_DEVTYPE_SEQUENCERvideodiscMCI_DEVTYPE_VIDEODISCwaveaudioMCI_DETTYPE_MAVEFORM_AUDIO184常用命令消息(1)MCI_PLAY命令消息MCI_PLAY命令消息通知设备开始传送输出数据。MCI_PLAY命令的对应参
11、数结构为:typedef struct DWORD_PTR dwCallback; /低字节存放MCI_NOTIFY使用的窗口句柄 DWORD dwFrom; /开始播放的位置 DWORD dwTo; /播放结束的位置 MCI_PLAY_PARMS;MCI_PLAY常用的标志有:MCI_FROM,MCI_TO,MCI_DGV_PLAY_REPEAT等19(2)MCI_SET命令消息MCI_SET设置设备信息。MCI_SET命令的对应参数结构为typedef struct DWORD_PTR dwCallback; / /低字节存放MCI_NOTIFY使用的窗口句柄 DWORD dwTimeFo
12、rmat; /设备的时间格式 DWORD dwAudio; /音频输出通道 MCI_SET_PARMS;MCI_SET常用的标志有:MCI_SET_AUDIO,表示音频通道号包含在参数结构中; MCI_SET_TIME_FORMAT,时间格式参数包含在参数结构中;205关闭一个设备MCI_CLOSE命令消息取消对一个设备或者设备元素的访问,它类似于一个文件的关闭操作。当所有使用一个设备的任务均关闭了这个设备时,MCI释放这个设备。MCI_CLOSE的参数结构typedef struct DWORD_PTR dwCallback; /低字节存放MCI_NOTIFY使用的窗口句柄 MCI_GENE
13、RIC_PARMS;21播放声音文件【例6-1】 使用命令消息接口函数播放特定WAV声音文件“e:01.wav”。解题思路:包含头文件 和;加载多媒体编程库文件#pragma comment(lib, winmm);声明打开设备消息参数结构体变量;填充参数;使用mciSendCommand和MCI_OPEN命令消息打开设备;声明播放设备消息参数结构体变量;使用mciSendCommand和MCI_PLAY命令消息播放设备;进入循环等待播放。22思考题(1)如何使程序可以播放任意从键盘输出的文件?(2)查找资料,考虑如何控制播放过程的暂停、继续和从头播放?236.2.2 命令字符串接口命令字符串
14、接口使用文本命令控制MCI设备。文本串中包含执行一个命令所需的所有信息。基于字符串的命令,把控制命令连接在一起,然后通过mciSendString函数提交给MCI。Windows多媒体扩充软件为使用命令字符串接口传送命令字符串提供了3个函数: mciSendString、mciGetErrorString、mciExecute。241mciExecutemciExcute函数是mciSendString的简化形式语法定义如下:BOOL mciExecute (Lpstr Command)LpstrCommand是一个指向以NULL结束的控制命令的字符串,字符格式与mciSendString相同
15、。若函数调用功能,返回TRUE,否则返回FALSE。252mciGetErrorString函数mciGetErrorString函数返回一个MCI错误代码的文本描述字符串,其语法如下:WORD mciGetErrorString (DWORD Error, Lpstr Buffer, WORD Length)3mciSendString函数命令字符串接口函数mciSendString的原形如下:MCIERROR mciSendString(LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCall
16、back)26使用命令字符串播放声音文件【例6-2】 使用命令字符串接口函数播放E盘上的“01.mp3”文件。解题思路:包含头文件 和;加载多媒体编程库文件#pragma comment(lib, winmm);使用mciSendString函数和play命令字符串播放文件;进入循环等待播放。27提示与思考(1)mciSendString函数的后三个参数通常可以设置为NUll、0和NULL。(2)暂停播放的命令字符串可写为:pause e:01.mp3,继续播放的命令字符串可写为:resume e:01.mp3,停止播放的命令字符串可写为:stop e:01.mp3。请扩充该程序的功能。286
17、.2.3 Wave文件结构声音的处理最终是对声音数据的处理。声音数据以某种格式存放在计算机存储器中。RIFF(Resource Interchange File Format资源互换文件格式)是Microsoft公司定义的一种用于管理Windows环境中多媒体数据的文件格式。波形音频Wave、MDI和数字视频Avi文件都采用这种格式存储。29RIFF文件结构RIFF文件基本构成是称为“块”(Chunk)的单元,每个块由“ID”、“数据大小”及“数据”3部分所组成ID为4个字符所组成的代码,如RIFF,LIST等,指定块的标志ID;数据大小用来指定块的数据域大小,占用4个字节;数据用来描述具体的
18、声音信号,它可以由若干个子块构成,一般情况下,块与块是平行的,不能相互嵌套30ID,4字节数据大小,4字节数 据WAVE文件的格式类型为“WAVE”。RIFF块包含两个子块:这两个子块的ID分别是“fmt”和“data”,其中fmt子块由结构WAVEFORMATEX所组成,其子块的大小就是sizeof(WAVEFORMATEX),数据组成就是WAVEFORMATEX结构中的数据31WAVE文件结构32LIST块(4) LIST数据块大小(4)LIST数据WAVE文件结构实例RIFF 0 x00013bd0-80848Fmt 0 x00000010-16Data 0 x00013b7c-8076
19、4LIST 0 x00000028-404*7=2888085633346.2.4 音效处理读出wave文件,处理后存为新的文件1文件打开函数mmioOpen,原型为:HMMIO mmioOpen( LPSTR szFilename, LPMMIOINFO lpmmioinfo, DWORD dwOpenFlags);2读文件函数mmioRead,原型为: LONG mmioRead( HMMIO hmmio, HPSTR pch, LONG cch );353文件定位函数mmioSeek,该函数改变当前文件的指针,原型为:LONG mmioSeek( HMMIO hmmio, LONG lO
20、ffset, int iOrigin );4文件写入函数 mmioWrite,函数原型为:LONG mmioWrite( HMMIO hmmio, char _huge* p5文件关闭函数mmioClose,原型为MMRESULT mmioClose( HMMIO hmmio, UINT wFlags );ch, LONG cch );36声音反转【例6-3】 打开E盘中名为02.wav的WAVE音频文件,反转其中音频的数据,写入另一个新的WAVE格式的文件去。解题思路:以读写方式打开e:02.wav文件; 定位文件各部分,读取文件的类型、采样频率、样本位数、声道数、数据区大小等参数; 读入声
21、音数据到一个内存缓冲区中;反转其中的数据,类似与字符串的反转;以创建和读写方式打开文件02_new.wav将文件类型、格式参数、音频数据写回硬盘,文件符合WAVE格式标准。37分析程序打开WAV文件,读取数据到缓冲区,处理完数据后写回磁盘。可以用标准的C+输入输出流处理文件,本程序使用API提供的一组输入输出函数来完成此操作,这些函数均以mmio开头,提供针对WAVE文件的操作,可以简化编程。除了反转外,还可以对数据进行低通滤波、高通滤波及淡入淡出等处理。只需用相应的算法替换例3中相应的代码即可。思考题:(1)如何处理8位或32位的声音数据?(2)考虑对声音进行其他一些简单的效果处理,如增大音
22、量。386.3 图像处理使用Windows GDI绘制图形位图的显示BMP位图文件的操作396.3.1 使用Windows GDI绘制图形在Windows程序中,应用程序(包括Windows本身)的输出并不直接面向物理的设备,而是针对一个称之为设备环境(Device Context)的逻辑设备进行操作。设备环境包含了关于当前选定用于一种设备的画笔、画刷、字体和位图等信息,设备环境与实际设备之间的信息传送由Windows直接管理。MFC提供了用于若干不同类型的设备环境的类,应用程序在将任何东西画到设备中去之前,必须明确索取一个设备环境。 40GDI设备环境广泛地用于图形设备接口(Graphics
23、 Device Interface,GDI)中。GDI是Windows体系结构的一个主要组件,是在Windows平台上处理图形、图像的方法,负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。GDI使程序员毋须关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出。41在MFC应用中绘图CDC在MFC应用程序中,所有的绘制调用均通过相应的设备环境对象实现。在MFC类库中,用CDC类封装设备环境对象,并提供了在显示器、打印机或窗口的客户程序区域上画图的方法。所有图形的输出都可以使用CDC类提供方法来进行-对颜色进行操作、坐标映射和转换,对多边形和区域进行操作,绘
24、制各种形状,绘制文本,处理字体等。 42CPaintDCCPaintDC类是从CDC类派生的设备环境类。CPaintDC类的对象在OnPaint( )函数中使用,用于在窗口中绘图。CClientDC类也是常用的CDC派生类,用于在OnPaint( )函数外访问设备环境,提供对窗口客户区域的图形访问。另外,CDC还直接派生了两个类,CWindowDC类提供对整个窗口的图形访问;CMetaFileDC类用于操作Windows元文件,创建独立于设备的文件。43MFC中的绘图工具对象画笔、画刷、字体、位图等。封装在MFC图形对象类由CGdiObject基类派生而来CPen、CBrush、CFONT等。
25、441.选择画笔画笔是用来画线的工具,是CPen类的对象。/声明画笔对象,并创建宽度为3的红色实线笔 CPen penRed(PS_SOLID, 3, RGB(255, 0, 0);/ 使用新的画笔,保存原来的画笔以便恢复 Cpen*pOldPen=pDC-SelectObject(&penRed);/ 恢复原来的画笔 pDC-SelectObject(pOldPen);45线型Value Meaning PS_SOLID The pen is solid. PS_DASH The pen is dashed. PS_DOT The pen is dotted. PS_DASHDOT The
26、pen has alternating dashes and dots. PS_DASHDOTDOT The pen has dashes and double dots. PS_NULL The pen is invisible. PS_INSIDEFRAME 46CDC:SelectObject()方法CDC:SelectObject()方法选定放入当前设备环境的新对象,并返回一个指向被替换对象的指针,因此,语句 pOldPen = pDC-SelectObject(&penRed); 保存了原来的画笔。保存并恢复原来画笔的原因是,每个图形设备接口对象要占用一个HDC句柄,而可用的句柄数量
27、是有限的,在使用完后要及时释放。472.选择画刷CBrush画刷则用来填充区域的内部,是CBrush类的对象Windows将画刷分为两种,实心的和阴影的,创建函数不同/声明画刷对象CBrush brushBlue(RGB(0,255,0);/蓝色/创建画刷BOOL CreateSolidBrush ( COLORREF crColor ); /创建实画刷BOOL CreateHatchBrush ( int nIndex, COLORREF crColor );/创建阴影风格的画刷brushBlue.CreateStockObject (NULL_BRUSH); /透明画刷 /选择画刷pDC-
28、SelectObject (&brushBlue); 483.绘制图形(1)输出文字BOOL TextOut(int x, int y, const CString &str);在屏幕上(x,y)处,输出文字str。其中str是CString类型的字符串对象,如: CString str=”软件开发技术基础”;49(2)画点COLORREF SetPixel (int x, int y, COLORREF color);该函数在指定坐标(参数x,y)处按给定颜色color画点,返回值为原来此坐标处的颜色。50(3)画线画线工作需经两步完成:首先确定线的起始端位置,这可通过调用成员函数MoveT
29、o完成,其原型为: CPoint MoveTo ( int x, int y );MoveTo将绘图位置移至指定坐标处,并返回移动前的绘图位置。确定了线的起点后,即可使用成员函数LineTo画线: BOOL LineTo ( int x, int y );51(4)绘制矩形绘制矩形的成员函数为:BOOL Rectangle(int x1,int y1,int x2, int y2 );(5)绘制椭圆绘制椭圆成员函数的原型为:BOOL Ellipse(int x1, int y1, int x2, int y2 ); 其参数为需要绘制的矩形的左上角坐标(x1, y1)和右下角坐标(x2, y2)
30、。52其他的绘图函数还有:Arc() 绘制圆弧 Draw3Drect() 绘制三维矩形FillRect()用给定的的画刷填充矩形区域Pie()绘制饼块图Polygon()绘制多边形SetBkColor设置背景颜色SetTextColor设置文本颜色53MFC绘图【例6-4】 练习MFC使用绘图函数,在窗口中随机画出直线和其它形状的图形。解题思路:建立MFC框架程序,在OnDraw中写出相应的绘图代码即可绘制图形的一般过程是:创建画笔(CPen),创建画刷(CBrush),选择画笔,选择画刷,绘制图形,然后恢复原来的画刷和画笔。也可以使用缺省的画刷和画笔直接绘制图形。54操作步骤:新建一个单文档
31、MFC程序,项目名称为mm064,其余设置不变。 工作区(Workspace)窗口中的类视图中,展开CMm064View类(简称View或视图类),双击OnDraw函数,在该函数中添加代码。55绘制统计直方图【例6-5】 设有一个班级的考试成绩中,90以上、80、70、60和不及格各档次的人数分别为3、8、12、5、2。请编程画出各档次成绩统计的直方图。解题思路:直方图可以通过矩形函数实现,使用画刷填充不同的颜色,也可以选择随机色。坐标轴用直线函数绘制。实际上,本题的关键是确定绘图的坐标。可以假设窗口不小于400*400,直方图矩形最大高度为200,其他可以根据人数的比例确定,宽度为60,矩形
32、间隔5。横轴从(20,300)到(400,300),横轴下方要书写文字标注。具体计算公式请分析写面的程序。56操作步骤:新建一个单文档MFC程序,项目名称为mm065,其余设置不变。 工作区(Workspace)窗口中的类视图中,展开CMm065View类(简称View或视图类),双击OnDraw函数,在该函数中添加代码。在视图类的开始处包含以下头文件。#include /支持Rand函数#include /支持时间函数576.3.2位图的显示位图在Windows程序里被当作一种资源。资源是Windows应用程序在运行时用到的一些数据,如菜单、加速键、位图、图表、光标、对话框、字符串等。一般情
33、况下,资源数据保留在硬盘上的可执行文件中。当应用程序创建窗口、显示对话框或位图时,才从硬盘的EXE或DLL文件中读取相应的资源数据。一个项目在一个扩展名为.rc的文件中定义资源,资源文件通常与项目同名。位图信息可以放在一个CBitmap类的对象中581添加位图资源新建一个单文档MFC程序。在工作区中切换到资源视图(ResourceView)中,在菜单中选择“Insert-Resource”。在弹出的对话框中选择Bitmap,然后单击【Import】按钮,导入一幅BMP位图。位图的ID号使用IDB_BITMAP1。ID号可以修改592添加位图对象在View类中添加CBitmap类的一个对象作为数
34、据成员。CBitmap m_Bitmap;3使用LoadBitmap载入位图资源函数BOOL LoadBitmap( LPCTSTR lpszResourceName ); BOOL LoadBitmap( UINT nIDResource );其中参数lpszResourceName和nIDResource分别为资源名称和标识符604读位图信息函数GetBitmapint GetBitmap( BITMAP* pBitMap );其中参数pBitMap为一BITMAP结构体对象的地址。BITMAP结构体类型用于存放位图有关信息,结构如下:typedef struct tagBITMAP in
35、t bmType; int bmWidth; int bmHeight; int bmWidthBytes; BYTE bmPlanes; BYTE bmBitsPixel; LPVOID bmBits; BITMAP;615建立一合适的内存设备环境CDC MemDC;MemDC. CreateCompatibleDC(NULL);6将位图选入该设备环境:MemDC.SelectObject(&m_Bitmap);其中m_Bitmap是CBitmap类的对象。62 7将位图从内存设备环境 复制到指定设备使用CDC类的BitBlt( )成员函数从内存设备环境中将位图复制到指定设备(如窗口或打印机
36、)。BitBlt( )函数的原型为:BOOL BitBlt ( int x, int y, int nWidth, int nHeight, CDC* pSrcDC,int xSrc, int ySrc, DWORD dwRop );63在窗口中显示一幅位图【例6-6】 在窗口中显示一幅位图,设位图的文件名为flower.bmp。解题思路:创建单文档MFC工程,添加位图资源,在View类OnDraw成员函数中按步骤编程。64思考题 位图显示的基本过程是在视图类的构造函数中载入位图资源并取得其宽度和高度数据。在OnDraw( )函数中,首先建立一内存设备环境并选入已装载的位图资源,然后使用Bit
37、Blt( )函数将位图显示在窗口的客户区。请尝试显示位图的部分区域。 CDC类的成员函数StretchBlt( )也可用来显示位图资源。其原型为:BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );65BITMAP Structuretypedef struct tagBITMAP /* bm */ int bmType; int bmWidth; int bmHeight; in
38、t bmWidthBytes; BYTE bmPlanes; BYTE bmBitsPixel; LPVOID bmBits; BITMAP; 666.3.3 BMP位图文件的操作如果需要在自己的程序中对位图作几何处理或效果处理,则需要了解位图的文件结构,将位图数据读入内存,对数据进行计算后,再将数据以规定的格式写到磁盘上671位图文件的结构BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成.BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成 (BITMAPFILEHEADER )BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息位图信息图头,用于说明位
39、图的尺寸等信息 信息头之后是颜色表用于说明位图中的颜色(24位位图没有颜色表),它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色68数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上(倒放的) 69(1)位图文件头typedef struct tagBITMAPFILEHEADERWORDbfType; /DWORD bfSize; /WORDbfReserved1; /WORDbfReserved2; /DWORD bfOffBits; / BITMAPFILEHEADER;70(2)位图信息头typedef struct tagBITM
40、APINFOHEADERDWORD biSize; /LONG biWidth; /LONG biHeight; /WORD biPlanes; /WORD biBitCount/DWORD biCompression; /DWORD biSizeImage; LONG biXPelsPerMeter; /LONG biYPelsPerMeter; /DWORD biClrUsed;/DWORD biClrImportant;/ BITMAPINFOHEADER;71(3)颜色表信息头之后是颜色表用于说明位图中的颜色(24位位图没有颜色表),它有若干个表项,每一个表项是一个RGBQUAD类型的
41、结构,定义一种颜色。typedef struct tagRGBQUAD BYTErgbBlue;/ 蓝色的亮度(值范围为0-255)BYTErgbGreen; / 绿色的亮度(值范围为0-255)BYTErgbRed; / 红色的亮度(值范围为0-255)BYTErgbReserved;/ 保留,必须为0 RGBQUAD;72颜色表中RGBQUAD结构数据的个数有biBitCount 来确定,当biBitCount = 1、4或8时,分别有2、16和256个表项;当biBitCount = 24时,没有颜色表项。位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:typedef
42、struct tagBITMAPINFOBITMAPINFOHEADER bmiHeader; / 位图信息头RGBQUAD bmiColors1; / 颜色表 BITMAPINFO;73(4)位图数据位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上(倒放的)。biBitCount = 1时,8个像素占1个字节,每像素1位;biBitCount = 4时,2个像素占1个字节;biBitCount = 8时,1个像素占1个字节;biBitCount = 24时,1个像素占3个字节,每个字节表示一个颜色分量,顺序由低位到高位分别是蓝、绿、红。一个扫描行所占的实际字节数计算为:DataSizePerLine = (biWidth* biBitCount+31) / 32 * 4;位图数据的大小(不压缩情况下):DataSize= DataSizePerLine* biHeight;742BMP位图文件的读写与处理对BMP文件图像进一步处理的方法之一是将bmp文件读入内存,让后将R、G、B 三个分量分别存储为3个二维矩阵。二维矩阵的列行分别对应图像的宽度和高度,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/ZJSEE 0048.2-2025虚拟电厂 第2部分:信息交互功能规范
- T/JCJJ 048-2024钢渣资源回收利用一次处理工艺技术要求
- T/CNCA 065-2024二氧化碳深部咸水层地质封存泄漏监测指标体系
- T/CASMES 400-2024质子交换膜水电解制氢阳极催化剂 测试方法
- T/CSMT YB015-2025光电复合电离源飞行时间质谱仪性能测试方法
- GB/T 18591-2026焊接预热温度、道间温度及预热维持温度的测量
- 2027届重庆市沙坪坝区第八中学数学七上期末统考试题含解析
- 2025-2026学年辽宁省凤城市初中政治九年级期末上册自测核心强化题(附答案)
- PHP商城开发面试题及详细答案(实战版)
- 智能温室大棚搭建与环境控制系统安装方案
- 2026年溶聚丁苯橡胶行业洞察报告及未来五至十年发展趋势报告
- 2026年四川省高考历史真题试卷
- 八年级物理上册期末《声现象》6大易错题专项训练
- 2026人教版六年级数学上册活动课《水是生命之源》教案
- 2026年四川省拟任县处级领导干部理论(任职资格考试)全真模拟试题及答案
- 钩吻碱中毒(断肠草中毒)的急诊处理
- 冷轧硅钢及金属制品深加工项目可行性研究报告模板拿地申报
- 制度壁垒经济效应-洞察与解读
- 设备日常维护保养培训课件
- 造林树种选择
- 义鼠课件教学课件
评论
0/150
提交评论