《多媒体技术》作业汇总.docx
《《多媒体技术》作业汇总.docx》由会员分享,可在线阅读,更多相关《《多媒体技术》作业汇总.docx(17页珍藏版)》请在冰豆网上搜索。
![《多媒体技术》作业汇总.docx](https://file1.bdocx.com/fileroot1/2022-11/29/f9cb1716-b74a-45d1-84bd-28ac63f05979/f9cb1716-b74a-45d1-84bd-28ac63f059791.gif)
《多媒体技术》作业汇总
部分《多媒体技术》软件实验
共同的基本实验条件:
多媒体PC机、Windows操作系统、VisualC++(MFC)
1.(必做平时作业)Wave
(1)实验名称:
波形音频文件的读显和播放。
(2)实验背景:
音频是一类重要的媒体,WAV文件是PC机的常用波形(Wave)音频格式,是Windows的多媒体文件格式RIFF中的一种,WAV文件中的音频数据一般未压缩,可(不需解码)直接由声卡和音频芯片播放。
(3)实验目的:
掌握波形音频信号的数字化结果和参数,熟悉WAV文件格式,掌握数据预处理和曲线绘制方法,了解波形曲线和声音的关系,学习多媒体编程准备(包含多媒体头文件并添加多媒体库文件)和波形文件的播放方法。
(4)实验内容:
播放WAV文件,读入WAV文件中的参数和音频数据,在程序窗口的客户区绘制波形音频数据曲线。
(5)实验步骤:
创建一个名为Wave的单文档MFC应用程序,利用“文件”菜单中的“打开”菜单项弹出的“打开”对话框获取用户选择的WAV文件的完整路径名串,在文档类的序列化函数中利用PlaySound函数播放该波形文件(需包含多媒体头文件mmsystem.h并为项目添加多媒体库文件winmm.lib)、读入此WAV文件中的参数和音频数据,在视图类的OnDraw函数中利用保存在文档类的公共变量中的音频参数和(单/双声道)波形数据绘制(一/两条)音频波形曲线,参见下图:
单声道波形音频数据的Wave程序
双声道波形音频数据的Wave程序
建议:
●对不同位数的整数样本值,可以先在文档类中归一化到[-1,1]区间的浮点数后,再在视图类中统一显示。
●对大波形文件,当样本个数大于客户区宽度的4倍时(经验值,你也可以取3倍、5倍、或6倍等等),可以改为逐像素点画垂直的直线段,该线段两端点的y值等于该像素所对应的样本值序列的最大/小值。
(6)其他实验条件:
WAV文件的基本格式、若干WAV文件。
2.(选做平时作业)Pallette
(1)实验名称:
实现调色板对话框。
(2)实验背景:
图形绘制和图像处理都需要选择颜色,屏幕显示颜色一般用RGB模型,而人类则一般习惯使用HSL模型,需要进行相互转换。
(3)实验目的:
熟悉颜色的特性和常用模型,掌握RGB和HSL模型间的相互转换算法,学习对话框中的鼠标和键盘消息响应、在控件上绘图、文本编辑框的改变消息和焦点消息的响应。
(4)实验内容:
编程实现交互式调色板对话框,包含色调-饱和度块、亮度条和选中色块,HSL和RGB编辑框,可用鼠标选择颜色、在各编辑框中修改颜色分量值、并进行HSL和RGB间的实时动态模型转换,参见下图:
调色板程序
(5)实验步骤:
创建一个基于对话框的MFC应用程序,添加三个图片控件、六个编辑控件和若干静态文本控件。
在对话框初始化时逐像素绘制色调-饱和度块、逐线绘制亮度条、绘制选中色块矩形、(利用异或方法)绘制表示当前颜色值位置的十字线和直线段。
响应色调-饱和度块和亮度条上的鼠标单击和拖动消息,重新绘制亮度条及表示当前颜色值位置的十字线和直线段,修改编辑框中的HSL值,进行HSL到RGB的转换,根据此转换的结果修改编辑框中RGB的值,利用新的RGB值重新绘制选中色块。
响应有输入焦点的文本编辑框的改变消息,根据HSL或RGB编辑框中的新值,进行HSL到RGB或RGB到HSL的转换,利用转换结果修改RGB或HSL编辑框中的值。
用新的HSL值,重新绘制亮度条及表示当前颜色值位置的十字线和直线段,用新的RGB值重新绘制选中色块。
(6)其他实验条件:
无。
3.(必做平时作业)BMP
(1)实验名称:
读取和解码BMP文件,逐点显示并灰度转换。
(2)实验背景:
BMP(Bitmap,位图)是Windows平台的基本图像格式,支持各种颜色位数的图像,一般不压缩,可以直接用于显卡或GPU的显示。
对4位和8位颜色BMP文件,可以还采用RLE(游程编码)进行压缩。
有时需要将彩色图像转换为灰度图。
(3)实验目的:
熟悉BMP文件格式,了解基本图像参数,掌握RLE压缩算法和彩色转灰度算法,复习像素绘制函数。
(4)实验内容:
直接读取(各种颜色位数的)BMP文件中的图像参数和二进制数据,必要时进行RLE解码,逐像素绘制图像数据。
并利用公式:
Y=0.299R+0.587G+0.114B,将8位彩图和真彩图转换为灰度图,然后逐像素显示。
(5)实验步骤:
创建一个单文档MFC应用程序,利用“文件”菜单中的“打开”菜单项弹出的“打开”对话框获取用户选择的BMP文件的完整路径名串,在文档类的序列化函数中读入此BMP文件中的图像参数和数据,如果含RLE压缩编码则进行解码,利用读入的调色板参数获取图像的RGB数据。
在视图类的OnDraw函数中利用保存在文档类的公共变量中的图像参数和数据,使用CDC类的SetPixl函数逐像素绘制图像。
在用户选择灰度转换时,利用公式:
Y=0.299R+0.587G+0.114B,将8位彩图和真彩图转换为灰度图,然后再逐像素显示它。
(6)其他实验条件:
BMP文件格式,若干BMP文件。
4.(选做平时作业)GIF
(1)实验名称:
读显GIF文件。
(2)实验背景:
GIF(可交换图形格式)是最常用的图像文件格式之一,采用了无损的LZW字典编码压缩算法。
(3)实验目的:
熟悉GIF文件格式,掌握LZW压缩算法。
(4)实验内容:
读入(含单个图片的)GIF文件,实现LZW解码,在程序窗口的客户区显示图片。
(5)实验步骤:
创建一个单文档MFC应用程序,利用“文件”菜单中的“打开”菜单项弹出的“打开”对话框获取用户选择的GIF文件的完整路径名串,在文档类的序列化函数中读入此GIF文件中的图像参数和数据,实现LZW解码算法,利用读入的调色板参数获取图像的RGB数据。
在视图类的OnDraw函数中利用保存在文档类的公共变量中的图像参数和数据,使用CDC类的SetPixl函数逐像素绘制图像。
(6)其他实验条件:
GIF文件格式,若干GIF文件。
5.(大作业选题)PNG
(1)实验名称:
读显PNG文件。
(2)实验背景:
PNG(可移植网络图形)是W3C(万维网协会)于1996年10月制定的一种采用无损压缩的图像文件格式,在万维网上的使用越来越广泛。
PNG格式支持多达16位的灰度图和48位的真彩图,并且还可支持多达16位的α通道数据。
PNG既突破了GIF的8位颜色的限制,又规避了LZW算法的专利收费。
(3)实验目的:
熟悉PNG文件格式,掌握DEFLATE压缩算法。
(4)实验内容:
读入PNG文件,实现DEFLATE解码,在程序窗口的客户区显示图片。
(5)实验步骤:
创建一个单文档MFC应用程序,利用“文件”菜单中的“打开”菜单项弹出的“打开”对话框获取用户选择的PNG文件的完整路径名串,在文档类的序列化函数中读入此PNG文件中的图像参数和数据,实现DEFLATE解码算法。
在视图类的OnDraw函数中利用保存在文档类的公共变量中的图像参数和数据,使用CDC类的SetPixl函数逐像素绘制图像。
(6)其他实验条件:
PNG文件格式,若干PNG文件。
6.(必做平时作业)DCT
(1)实验名称:
实现JPEG中的DCT变换和量化算法。
(2)实验背景:
JPEG是最常用的有损图像压缩算法,而8×8的二维DCT(离散余弦变换)变换和量化又是该算法中的核心步骤。
(3)实验目的:
掌握8×8数据块的正反二维DCT变换、量化和逆量化的具体算法。
(4)实验内容:
逐个读入8×8(十六进制文本串格式的)亮度数据块,依次进行二维DCT变换、量化(采用标准亮度量化表)、逆量化和逆二维DCT变换。
输出原始数据、变换后的数据、量化表、量化后的数据、逆量化的数据和反变换的数据(格式参见下图)。
DCT和量化算法举例
(5)实验步骤:
创建一个VisualC++的Win32控制台应用程序,读入标准亮度量化表,逐个读入8×8亮度数据块,编码实现二维DCT变换、量化、逆量化和逆二维DCT变换。
输出8×8的原始数据块、变换后的数据块、量化表、量化后的数据块、逆量化的数据块和反变换的数据块。
(6)其他实验条件:
4个8×8的十六进制亮度值整数串块和标准亮度量化表:
989C96999CA1A1A6B2C9EAE4C9B8D3E2
9495959698A0A1A7B3CBE2EAD3CDE6E2
959491949DA3A9A6A7A9B7BCD4D8C0B2
8D928F948F8F8C87848392919DA29890
7F7C7B747273726F6F6B7A7F8B855D4E
5A616A5D58544D49515F6D7277675C54
6A72747374746F7072727F898D948B7E
777F8589879AA2A6AEAFBEC9CCC7A289
767A7C8791A3B3C3C3C0C5CFD5C79989
7F837F7E89969AA2A7A39C9EA6A28991
7A7F817F7F8C909099969290908C8C96
7F7B77777A818487908887817F8B989A
847E7C7674707274747074788CA29D94
85818788837C787C80858D99A0A1948D
88899296969A9D9D9C9EA1A1A19D8D94
94949CA1A5ABB2AEA6A5A5A6A1999695
4个8×8的亮度值块
1718244799999999
1821266699999999
2426569999999999
4766999999999999
9999999999999999
9999999999999999
9999999999999999
9999999999999999
标准亮度量化值
7.(大作业选题)JPEG
(1)实验名称:
读显JPEG文件。
(2)实验背景:
JPEG(联合图象专家组)是使用最广泛的有损图像压缩算法,是ISO/IEC和ITU于1992年推出的国际标准,支持8位灰度图和真彩图。
JFIF是JPEG文件格式(*.JPG)的事实标准。
(3)实验目的:
熟悉JFIF文件格式,掌握JPEG算法。
(4)实验内容:
读入JPG文件,实现JPEG解码,在程序窗口的客户区显示图片。
(5)实验步骤:
创建一个单文档MFC应用程序,利用“文件”菜单中的“打开”菜单项弹出的“打开”对话框获取用户选择的JPEG文件的完整路径名串,在文档类的序列化函数中读入此JPEG文件中的图像参数和数据,实现JPEG解码算法——熵解码(Huffman/LRE算法)、逆量化、IDCT、重构图像数据。
在视图类的OnDraw函数中利用保存在文档类的公共变量中的图像参数和数据,使用CDC类的SetPixl函数逐像素绘制图像。
(6)其他实验条件:
标准量化表、标准Huffman表、JFIF文件格式,若干JPG文件。
8.(大作业选题)ImgConvt
实现JPEG算法的编解码,读写并显示*.JPG文件及*.BMP和*.GIF文件,实现这几种文件格式的相互转换。
(1)实验名称:
常用图像文件的格式转换。
(2)实验背景:
在不同的系统平台和应用环境中,有时需要在不同的图像文件格式(如Windows中的BMP、万维网中的PNG、通用的JPEG和GIF等)之间进行相互转换。
(3)实验目的:
熟悉BMP、GIF、PNG和JPEG的文件格式,掌握RLE、LZW、DEFLATE和JPEG压缩算法的编解码。
(4)实验内容:
读入BMP、GIF、PNG或JPEG文件,解码并显示图像。
按用户要求转换(编码)成另一种图像格式保存。
(5)实验步骤:
创建一个多文档MFC应用程序,利用“文件”菜单中的“打开”菜单项弹出的“打开”对话框获取用户选择的图像文件的完整路径名串,在文档类的序列化函数中读入此文件中的图像参数和数据,实现对应的解码算法。
在视图类的OnDraw函数中利用保存在文档类的公共变量中的图像参数和数据,显示该图像。
响应用户的“文件”菜单中的“另存为”命令,进行对应格式的编码(转换),在文档类的序列化函数中将图像参数和数据写入指定文件。
(6)其他实验条件:
BMP、GIF、PNG和JFIF文件格式,若干BMP、GIF、PNG和JPG文件。
9.(必做平时作业)DukeAni
(1)实验名称:
实现公爵位图动画。
(2)实验背景:
动画(包括电影和电视)是一系列相关图片等时间间隔的连续显示,利用的是人类的“视觉滞留”原理和“心理认可”现象。
位图动画是动画的基础,公爵动画是Java的Logo。
(3)实验目的:
了解“视觉滞留”原理和“心理认可”现象,掌握位图组显示和计时器的设置与响应方法。
(4)实验内容:
按照用户设置的速度,循环播放公爵位图动画。
参见下图:
公爵位图动画程序
(5)实验步骤:
创建一个名为Duke的基于对话框的MFC应用程序,添加一个图片控件、一个静态文本控件和一个编辑控件、一个“播放/停止”按钮。
将公爵(Duke)动画所对应的10个256色(8位)BMP文件T1.BMP~T10.BMP(参见下图)添加到项目资源中。
T1.BMPT2.BMPT3.BMPT4.BMPT5.BMP
T6.BMPT7.BMPT8.BMPT9.BMPT10.BMP
公爵位图资源系列图片
将T1.BMP设置为图片控件的初始图片(参见下图)。
在对话框初始化时,创建CImageList对象,加入公爵系列位图。
在用户按“播放”按钮时,读取编辑控件中的整数,利用计算的参数和SetTimer函数,启动计时器,修改按钮标题串为“停止”。
在计时器响应函数OnTimer中,利用CImageList的Draw函数显示当前图片,当前图片的序号加1并余10(循环)。
在用户按“停止”按钮时,利用KillTimer函数停止计时器,修改按钮标题串为“播放”。
公爵位图动画对话框资源
(6)其他实验条件:
公爵动画的10个BMP文件。
10.(必做平时作业)OpenGL
(1)实验名称:
OpenGL图形动画基础。
(2)实验背景:
OpenGL是二/三维图形动画API的国际标准,支持各种系统平台,在大型专业级的设计、动画和游戏等软件中使用广泛。
Direct3D和Java3D都源自OpenGL。
(3)实验目的:
了解OpenGL的特点、工作原理和过程,掌握OpenGL的形体构造和图形绘制方法。
通过动态修改观察点的位置,实现旋转物体和调整物体大小的(动画)目的。
(4)实验内容:
绘制自定义正方形并进行矩阵变换,绘制自定义球面和辅助库中的各种曲面(如网面茶壶),动态改变观察位置。
(5)实验步骤:
创建一个单文档MFC应用程序,为项目添加OpenGL库文件(opengl32.lib、glu32.lib、glaux.lib),在视图类中包含OpenGL的头文件(gl/gl.h、gl/glu.h、gl/glaux.h),在窗口创建函数进行必要的初始化,在OnDraw函数中绘制各种OpenGL图形。
添加键盘与鼠标响应,动态修改观察点的位置,实现旋转物体和改变大小的动画。
(6)其他实验条件:
对有些VisualStudio版本,须要自己下载和安装辅助库及其头文件(glaux.lib和glaux.h)。
11.(必做平时作业)Direct3D
(1)实验名称:
用Direct3D实现旋转圆筒。
(2)实验背景:
Direct3D是DirectX的主体部分,是Windows平台上游戏和动画的主要开发接口与工具。
(3)实验目的:
了解Direct3D的图形流水线和设备,掌握Direct3D的基本编程过程及光照材质与纹理的基本使用方法。
(4)实验内容:
初始化Direct3D、创建Direct3D对象和设备、构造圆柱面几何对象,在计时器响应中进行动态旋转变换,设置光照材质或纹理,绘制圆筒,实现旋转圆筒动画。
(5)实验步骤:
下载和安装DirectXSDK,创建一个单文档MFC应用程序,在视图类中包含多媒体和Direct3D头文件(mmsystem.h和d3dx9.h)。
在视图类的初始化更新函数中初始化Direct3D、创建Direct3D对象和设备、构造圆柱面几何对象、启动计时器。
在计时器响应函数中设置光照、材质与纹理,进行世界、观察和投影矩阵变换,包括动态旋转变换,渲染和显示场景,从而实现旋转圆筒动画。
(6)其他实验条件:
DirectXSDK9.0c以上版本。
12.(必做平时作业)MCI-AudioPlayer
(1)实验名称:
MCI音频播放器。
(2)实验背景:
MCI(媒体控制接口)是Windows控制多媒体设备的高层命令的传统接口,CD、WAV和MIDI是基本的音频类型。
(3)实验目的:
掌握MCI的命令串和命令消息方式,熟悉CD、WAV和MIDI设备的相关命令参数。
(4)实验内容:
使用MCI的命令串或命令消息方式,打开和播放CD、WAV和MIDI设备和文件,显示相关参数信息,交互控制各种音频媒体的播放。
(5)实验步骤:
创建一个基于对话框的MFC应用程序,添加若干按钮、单选钮、编辑控件和静态文本控件。
使用MCI的命令串或命令消息方式,打开指定的设备类型,显示相关参数息信。
响应用户操作,控制设备(媒体文件)的播放。
参加下图:
CD-DA播放器
(6)其他实验条件:
若干CD-DA光盘、WAV文件和MIDI文件。
13.(必做平时作业)MIDI-VirtualEleOrgan
(1)实验名称:
虚拟电子琴。
(2)实验背景:
MIDI(乐器数字接口)是电子乐器和计算机之间交换音乐信息所使用的一种标准协议,使用非常广泛。
PC机的音频芯片和声卡中含有支持MIDI的声音合成器,可用来模拟电子琴。
(3)实验目的:
掌握MMAPI(多媒体API)中的基本MIDI函数midiOutShortMsg,熟悉常用的MIDI消息参数——音符开(发出乐音)、音符关(停止乐音)和程序改变(选择音色/乐器种类),了解GM旋律乐器音色编号。
(4)实验内容:
利用PC机的键盘(鼠标)和音频芯片,编写利用MIDI接口来模拟电子琴的简单程序。
(5)实验步骤:
创建一个基于对话框的MFC应用程序,在项目属性中添加对多媒体库winmm.lib链接,在视图类中包含多媒体头文件mmsystem.h。
添加若干控件,用一排按钮表示电子琴的键盘、用列表框来选择乐器种类。
用主键盘上的数字键1~7表示中音1~7、在按1~7键的同时按住Shift键时播放高音
、在按1~7键的同时按住Ctrl键时播放低音
、在按1~7键的同时按住CapsLock键时播放超高音
、在按1~7键的同时按住左窗口键时播放超低音
。
在用户按下键盘上的数字键或用鼠标按下对应的对话框中按钮时,播放对应的乐音;在用户松开按键或按钮后停止乐音。
(6)其他实验条件:
GM旋律乐器音色编号表。
14.(必做平时作业)DirectSound-War
(1)实验名称:
战争音效。
(2)实验背景:
DirectSound是DirectX中的传统音频模块,是一种主要针对波形音频的高效底层接口。
(3)实验目的:
掌握DirectSound编程的具体步骤和方法,了解利用MMIO(多媒体文件IO)读取WAV文件和资源中的数据内容与参数信息的方法。
(4)实验内容:
用DirectSound控制和播放多种战争音效的波形文件,采用随机声道混音和立体音效,来模仿战场上枪林弹雨和爆炸声的音响效果。
在程序窗口的客户区输出字符串"闭上你的眼睛,聆听战争..."。
(5)实验步骤:
下载和安装DirectXSDK,创建一个单文档MFC应用程序,添加13个战争音效的WAV文件资源,包含多媒体头文件MMSystem.h和DirectSound的头文件DSound.h。
在窗口的创建函数中,初始化声音对象,其中用若干MMIO函数来获得波形音频的结构和波形数据的大小、将WAV文件或资源中的波形数据填入辅声音缓冲区。
在计时器消息响应函数中,随机播放各种战争音效的WAV资源。
并调节左右声道的相对音量,以产生声音移动的立体声效果。
对直升飞机的声音,采用循环播放,并不断调节左右声道的相对音量,还依据其离中心平衡点的远近,来设置主音量的大小,使越远声音越小。
在OnDraw函数中,设置42磅黑体字和红色文本颜色,输出字符串"闭上你的眼睛,聆听战争..."。
(6)其他实验条件:
DirectXSDK9.0c以上版本,13个基本战争音响波形文件——1种直升飞机声音、2种飞弹声、5种枪声、4种爆炸声、1种警报声。
15.(选做平时作业)AVI
(1)实验题目:
播放AVI文件。
(2)实验目标:
熟悉AVI(音视频交错)文件的基本格式,读取音视频参数和数据,同步播放音视频数据。
(3)实验要求:
编写MFC应用程序,实现无压缩AVI文件的手工解码和播放。
16.(大作业选题)MPEG-1
(1)实验题目:
播放MPEG-1和VCD文件。
(2)实验目标:
掌握MPEG(运动图象专家组)-1的音视频解码方法,了解常用的MPEG-1和VCD文件格式。
(3)实验要求:
编写MFC应用程序,实现MPEG-1或VCD的音视频解码和同步播放。
可以参考若干自由源代码。
17.(大作业选题)MP3
(1)实验题目:
播放MP3文件。
(2)实验目标:
掌握MP3(MPEG-1AudioLayerⅢ)音视频解码方法,了解MP3文件格式。
(3)实验要求:
编写MFC应用程序,实现MP3解码算法和音频播放。
可以参考若干自由源代码。
18.(大作业选题)MPEG-2
(1)实验题目:
播放MPEG-2和DVD文件。
(2)实验目标:
掌握MPEG-2的基本音视频解码方法,了解常用的MPEG-2和DVD文件格式。
(3)实验要求:
编写MFC应用程序,实现MPEG-2和DVD的音视频解码和同步播放。
可以参考若干自由源代码。
19.(大作业选题)H.264/AVC
(1)实验题目:
播放采用H.264/AVC编码的视频文件。
(2)实验目标:
掌握H.264/AVC(先进频编码)的基本视频解码方法,了解常用的H.264/AVC文件格式。
(3)实验要求:
编写MFC应用程序,实现H.264/AVC解码算法,播放视频数据。
可以参考若干自由源代码。
20.(大作业选题)AVS-P2
(1)实验题目:
播放采用AVS-P2编码的视频文件。
(2)实验目标:
掌握AVS-P2(音视频编码标准-第2部分)的基本视频解码方法,了解常用的AVS-P2文件格式。
(3)实验要求:
编写MFC应用程序,实现AVS-P2解码算法,播放视频