第三讲 多媒体编程技术

27
第第第 第第 第第第第 3.1 第第 第第 3.1.1 第第第第3.1.2 第第第第3.1.3 WIN 32 第第第3.2 VC++ 第第第第第第第第第第 3.2.1 第第第第第第第 3.2.2 第第第第第第第第第 3.3 VC++ 第第第第第第第第第第 3.4 VC++ 第第第第第第第第第第

description

第三讲 多媒体编程技术. 3.1 多媒体概述 3.1.1 视觉类媒体 3.1.2 听觉类媒体 3.1.3 WIN 32 的多媒体 3.2 VC++ 开发工具中声音的处理 3.2.1 波形声音的特点 3.2.2 波形音频文件的播放 3.3 VC++ 开发工具中图像的处理 3.4 VC++ 开发工具中视频的处理. 3.1 多媒体概述 MCI :媒体控制接口。 媒体:承载信息的接口,包括感觉、表示、显示、存储、传输媒体。其中最重要的是多媒体表示,有数值、文本、声音、图形、图像等,即多种媒体的综合。 3.1.1 视觉类媒体 1 、位图图像 - PowerPoint PPT Presentation

Transcript of 第三讲 多媒体编程技术

Page 1: 第三讲     多媒体编程技术

第三讲 多媒体编程技术

3.1 多媒体概述 3.1.1 视觉类媒体 3.1.2 听觉类媒体 3.1.3 WIN 32 的多媒体3.2 VC++ 开发工具中声音的处理 3.2.1 波形声音的特点 3.2.2 波形音频文件的播放3.3 VC++ 开发工具中图像的处理3.4 VC++ 开发工具中视频的处理

Page 2: 第三讲     多媒体编程技术

3.1 多媒体概述MCI :媒体控制接口。媒体:承载信息的接口,包括感觉、表示、显示、存储、传输媒体。其中最重要的是多媒体表示,有数值、文本、声音、图形、图像等,即多种媒体的综合。 3.1.1 视觉类媒体1 、位图图像位图:是一种对视觉信号进行了直接量化的媒体形式,反映了信号的原始形式。 WINDOWS用 Bitmap 来显示和保存图像,从单色到 24 位真彩色图象都可以存储到位图中。

Page 3: 第三讲     多媒体编程技术

位图是一个像素值阵列,像素阵列存储在字节数组中,每个像素的位数可以是 1 、 4 、 8 、 24 。

单色位图:每个字节存储八个像素,(每个像素用 0 或 1 表示);16 色位图:每个字节存储二个像素;256 色位图:每个字节存储一个像素;24 位真彩:三个字节存储一个像素。

256 色以下位图中存储的:像素值是调色板中值的索引。真彩色位图中存储的:像素的 RGB 值。256 是怎么来的?什么是 RGB ?

Page 4: 第三讲     多媒体编程技术

位图包括: DDB 位图和 DIB 位图。

1)DDB 依赖设备位图 (Device-dependent bitmap) :依赖于输出设备,进行动态转换,只能在显卡或系统内存中。问:若显示器为 16 色,一个像素占用内存几位?

2)DIB 设备无关位图 (Device-independent bitmap):DIB 的颜色模式与设备无关 . 256 及以下色拥有自己的颜色表 , 独立于系统调色板 . 以 *.bmp 或 *.dib文件存储

Page 5: 第三讲     多媒体编程技术

2. 矢量图形这是对图形进行抽象的结果 , 反映了图像中实体最重要的特征 . 矢量图形用一组指令的形式描述图形特征 , 其需要的存储量很少 , 但显示时要经过计算才能显示出原图 .3. 动态图像这是若干连续的静态图像在时间轴上不断变化的结果 . 如果单帧图像是真实图像则为动态影视频 ;如果是普通图形则在连续过程中显示二维或三维动画 .4. 符号符号是一种对信息抽象的结果 , 文本就是一种符号流 .

Page 6: 第三讲     多媒体编程技术

3.1.2 听觉类媒体(1) 波形声音 :运用采样量化技术 . 以 .wav 文件来表示 .(2) 语言 :语言具有内在的语言特性 , 可由特殊的方法进行一次抽象 .(3) 音乐 :符号化的声音 , 以乐谱作为符号 , 如 MIDI 文件 .

Page 7: 第三讲     多媒体编程技术

3.1.3 WIN 32 的多媒体1. 服务功能有如下几个方面 :* 控制媒体服务 (Media Control Interface , MCI )* 与 MCI 设备驱动程序进行通信 , 可扩展的基于字符和基于消息的接口 .* 为播放和记录波形音频 , 播放乐器数字接口文件(MIDI) 以及在播放 CD 所提供的 MCI 设备程序 .* 支持多媒体相关服务的低级应用程序编程接口 .* 对用波形和 MIDI 音频设备播放和记录音频的低级支持 .* 对精确定时器服务的低级支持 .* 多媒体文件输入输出服务 .* 提供控制面板选择项 , 为用户安装 , 配置提供方便 .

Page 8: 第三讲     多媒体编程技术

2. 多媒体服务结构的组成 :

WINMM 库 : 提供了 MCI 服务和低级多媒体函数 .多媒体设备驱动程序 : 提供了低级 WINMM 函数与 多媒体设备硬件之间的通讯 .MCI 驱动程序 ,它提供了媒体设备的高级控制 .

VC++ 中用以下方式进行调用 :#include<WINDOWS.H>#include<Mmsystem.h>#pragma comment(lib,”winmm.lib”)// 项目设置

Page 9: 第三讲     多媒体编程技术

3.2 VC++ 开发工具中声音的处理 计算机中声音的种类 :音频 CD, MP3 文件 , 波形音频文件 ,MIDI 文件 .

3.2.1 波形声音的特点通过采样技术获得 , 采样频率主要有 : 44.1kHz , 22.05kHz, 11.025kHz. 频率越高声音越真实 .采样位数 :8 位或 16 位 . 位数越高采样精度越高 .声道数 : 声音的记录产生一个波形 ( 单声道 ) 或是两个波形 (双声道 )注 : 这种波形文件的数据量是十分巨大的 ,因而在实际运用中常常要经过压缩 .

Page 10: 第三讲     多媒体编程技术

3.2.2 波形音频文件的播放有三种方法可行 : 用 WIN32API 中以 wave 为前缀的函数 , 功能多但程序复杂 ;利用高级音频函数 ,使用方便但功能有限 ;利用媒本控制接口较好 .

1.利用高级音频函数播放波形音频文件 .有 MessageBeep, PlaySound, sndPlaySound. 这三个播放函数只播放小于 100KB 的声音 .

BOOL MessageBeep(UINT uType); 一般播放系统报警声音 . 应用有限 .uType 见 P57页中的定义 .

Page 11: 第三讲     多媒体编程技术

PlaySound 函数原型 :

BOOL PlaySound(LPCSTR pszSound, HMODULEHmod, DWORD fdwSound);

pszSound 声音文件名或内存中声音数据的指针等 .Hmod 应用程序的实例句柄 , 不用必须是 NULLfdwSound标志参数 .(见 P58页 )

Page 12: 第三讲     多媒体编程技术

运行实例 :详见 P59-60如 :PlaySound(“c:\\windows\\media\\Tada.wav”,NULL,SND_FILENAME|SND_ASYNC);

PlaySound(“Systemstart”,NULL,SND_ALIAS|SND_ASYNC);

sndPlaySound(“MYSOUND.WAV”, SND_ASYNC); // 不能直接播放声音资源

Page 13: 第三讲     多媒体编程技术

3.2.2 波形音频文件的播放2. 利用 MCI 播放声音MCI 函数能播放 WAV,MIDI,AVI 文件等 , 功能强 .接口分 :命令字符串和命令消息两种 .

<1> 与命令字符串有关的两个函数原型 :MCIERROR mciSendstring(LPCTSTR lpszCommand, //MCI命令字符串LPTSTR lpszReturnString,// 存反馈信息缓冲区名UINT cchReturn,//缓冲区大小HANDLE hwndCallback)// 一般为 NULL// 成功返回 0,否则返回错误码 .

Page 14: 第三讲     多媒体编程技术

BOOL mciGetErrorString(DWORD fdwError, //错误码值LPTSTR lpszErrorText, //错误信息字符串缓冲区UINT cchErrorText) //缓冲区字符串长度

例 :char buf[50]; MCIERROR mciError; mciError=mciSendString(“open tada.wav type Waveaudio”, buf,strlen(buf),NULL); If (mciError) {mciGetErrorString(mciError,buf,strlen(buf); AfxMessageBox(buf); Return;}// Waveaudio 是设备名 .

Page 15: 第三讲     多媒体编程技术

设备类型 描述Animation 动画设备Cdaudio CD 播放器Dat 数字音频磁带机Digitalvideo 某一窗口中的数字视频Other 未定义的 MCI 设备Owerlay 重叠设备 (窗口中的模拟视频 )

Scanner 图像扫描仪Sequencer MIDI 序列器Vidiodisc 视盘机waveaudio 播放数字波形文件音频设备

Page 16: 第三讲     多媒体编程技术

注 : 设备名和设备类型不同 , 设备名在注册表或SYSTEM.INI 中的 [mci]段 .(见操作 )

设备名和设备类型有时相同 , 如 cdaudio, wave-Audio, 有的不同 , 如 avivideo -> digitalvideo .MCI命令如下 :

命令 描述Capacility 查询设备能力Close 关闭设备Info 查询设备信息open 打开设备

Page 17: 第三讲     多媒体编程技术

命令 描述Pause 暂停设备的播放或记录Play 开始设备的播放Record 开始Resume 恢暂停播放或记录的设备Seek 改变媒体的当前位置Set 改变设置Status 查询设备状态信息stop 停止设备的播放或记录

例 : play cdaudio [from < track > to < track > ]

Page 18: 第三讲     多媒体编程技术

MCI 设备又可分为 :简单设备 : 不作用文件的设备如 cdaudio.复合设备 : 在播放时要用到数据文件 , 如 digitalvideo,waveaudio 设备 . 数据文件 称作设备元素 .在打开一个复合设备时要指定设备元素或同时指定设备名与设备元素 , 如Open mysound.wav 或Open mysound.wav type waveaudio若按前者打开 , 则系统自动定位设备名 . 如wav = waveaudio注 :当多次打开同一设备来播放不同的数据文件时 ,每次都要给打开的设备取一个不同的别名 .(见 p63)

Page 19: 第三讲     多媒体编程技术

<2> 命令消息接口所有 MCI命令消息都是通过 mciSendCommand 函数发送的 , 其原型为 :MCIERROR mciSendCommand(MCIDEVICEID IDDevice,// 设备的 ID,打开设备时 不用UINT uMsg,//命令消息DWORD fdwCommand,//命令消息的标志DWORD dwParam);// 指向包含命令消息参数的结构// 若成功返回 0,否则返回错误码值 .

Page 20: 第三讲     多媒体编程技术

要使用 mciSendCommand 函数 , 则需要二个数据结构 :MCI_PLAY-PARAMS,MCI_WAVE_OPEN_PARAMS , 二个数据结构的原型见 P64. 这二个结构被包函在头文件中 :MMSystem.h

详细内容在 P65 的 (1)至 (5)

实例参见 P65-72

Page 21: 第三讲     多媒体编程技术

3.3 VC++ 开发工具中图像的处理1. 动画原理 : 通过 SetTimer() 在程序中设定一个定时器 , 每隔一定的时间产生一个 WM_TIMER 消息 ,通过触发 OnTimer() ( 有相应的显示代码加载在此函数中 ,主要有 BitBlt 函数 ) 来实现动画的效果 .

计时器 : SetTimer(1,500,NULL) 第一个参数为计时器 ID 号 ; 第二个参数为每隔 500毫秒发送一次 WM_TIMER 消息给 OnTimer() ;第三个参数 NULL 表示计时器只用于发送定时消息而不是用来作为回调函数使用 .注 : 由于硬件定时器的原因 , OnTimer() 实际间隔时间为 555毫秒收到一条WM_TIMER 消息 .

Page 22: 第三讲     多媒体编程技术

CDC::BitBlt 的函数原型为 :BOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop);

成功返回时值为非 0, 否则为 0 值 .x, y, nWidth, nHeight, 目标矩阵左上角的逻辑坐标及宽和高 ; pSrcDC 标识位图设备上下文若不包括光栅操作则必须为 NULL; xSrc, ySrc分别指定原位图的左上角的坐标 ; dwRop 指定光栅操作代码 .

光栅操作码 描述BLACKNESS 所有输出变黑DSTINVERT 反转目标位图

Page 23: 第三讲     多媒体编程技术

光栅操作码 描述MERGECOPY 用布尔 AND 来合并特征与源位图

MERGEPAINT 用布尔 OR 来合并特征与源位图

NOTSRCCOPY 拷贝反转源位图到目标

NOTSRCERASE 反转用布尔 OR 来合并源与目标位图的结果

SRCAND 用布尔 AND 来合并目标像素与源位图

SRCCOPY 拷贝源位图到目标位图

SRCERASE 反转目标位图并用 AND 合并这个结果和源位图

SRCINVERT 使用 XOR 合并目标像素和源位图

SRCPAINT 使用 OR 合并目标像素和源位图

WHITENESS 所有输出变白

Page 24: 第三讲     多媒体编程技术

3.4 VC++ 开发工具中视频的处理Windows 95/98/NT 支持一种动画控件: AnimateControl, 播放 AVI 动画,该控件封装在CAnimateCtrl 类中,其成员函数有以下几个:1.创建动画控件 Create, 其原型为 :BOOL Create(DWORD dwStyle, const RECT& rect,CWnd* pParentWnd , UINT nID)

dwStyle 指控件风格 :ACS_CENTER使动画片居于控件中央 ,且控件窗口尺寸和位置保持不变 . 不指定则播放时控件窗口自动调整以适应动画窗口 ;ACS_TRANSPARENT使动画片的背景透明 ;ACS_AUTOPLAY 重复播放动画片 .

Page 25: 第三讲     多媒体编程技术

动画控件自身窗口风格有 :WS_CHILD,WS_VISIBLE, WS_BORDER 等 . rect 指定了控件的尺寸 , pParentWnd 指向父窗口 ,nID 是控件的 ID,若创建成功则函数返回 TRUE.

2. BOOL Open(LPCTSTR lpszFileName)/ BOOL Open(UINT nID)打开动画片 , 若参数为 NULL, 则系统将关闭以前打开的动画片 , 成功则函数返回 TRUE.

Page 26: 第三讲     多媒体编程技术

3. BOOL Play(UINT nFrom, UINT nTo, UINT nRep); 功能 : 播放动画片 . nFrom 开始帧的索引值 ,小于 65536, 若为 0 则从头 开始播放 . nTo 结束帧的索引值 ,小于 65536, 若为 -1 则播放播放动画到末尾 . nRep 重播次数 , 若为 -1 则无限次播放 .函数成功返回时为 TRUE.

4. BOOL Seek(UINT nTo)功能 : 静态显示动画片的某一帧 . nTo 帧的索引值 ,小于 65536, 若为 0 则显示第一帧 , 若为 -1 则显示最后一帧 , 函数成功返回 TRUE 值 .

Page 27: 第三讲     多媒体编程技术

5. BOOL Stop():停止动画片的播放 , 成功时返回 TRUE 值 .

6. BOOL Close(): 关闭并从内存中清除动画片 , 成 功时返回 TRUE 值 .

实例 :参见 P79