新多媒体实验报告.docx
- 文档编号:2935425
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:39
- 大小:2.22MB
新多媒体实验报告.docx
《新多媒体实验报告.docx》由会员分享,可在线阅读,更多相关《新多媒体实验报告.docx(39页珍藏版)》请在冰点文库上搜索。
新多媒体实验报告
一实验目的………………………………………………………………………1
二实验内容………………………………………………………………………1
三实验预备知识…………………………………………………………………1
四实验要求与成果………………………………………………………………1
五实验总结………………………………………………………………………7
一实验目的………………………………………………………………………7
二实验预备知识…………………………………………………………………7
三实验步骤………………………………………………………………………8
四思考题………………………………………………………………………19
五实验总结……………………………………………………………………21
一实验目的………………………………………………………………………21
二实验步骤………………………………………………………………………21
三实验成果………………………………………………………………………28
四实验总结……………………………………………………………………30
实验1图像采集与编辑实验
一、实验目的
1.了解数码相机基本使用。
2.熟悉PHOTOSHOP在图像处理上的用途。
3.掌握PHOTOSHOP一些基本的图像操作。
二、实验内容:
1.用数码相机拍摄照片。
2.将照片采集到电脑中处理。
3.运用PHOTOSHOP进行图像的编辑与创作。
三、实验预备知识
ADOBEPHOTOSHOP是Thomas和JohnKnoll俩兄弟设计制作,而后与Adobe公司合作,于1989年推行的一个集传统的暗房技术和印前处理功能于一体的综合图像处理软件,它将设计师和使用者集于一体,给图形设计界增添了巨大的活力。
位图即点阵图是由许多小方格的不同色块组成的图像,其中每一个小方格被称为像素。
Photoshop是一个位图处理软件,它可以真实的再现色彩丰富的世界。
由于位图文件在存储时必须记录其组成画面中每一个像素的位置、色彩等数据,因此它的文件信息量大,分辨率越高,信息量越大。
分辨率就是单位(英寸)长度所含像素的多少,单位为dpi。
分辨率可分为图像分辨率、输出分辨率、扫描分辨率等,分辨率是决定图像输入、输出质量高低的关键。
在一个数字化图像中,图像的尺寸、分辨率和文件的大小这三项之间是相互联系的。
当用户决定了其中任意亮相,便可决定第三项的参数:
文件的大小=图像的分辨率×图像尺寸。
位图模式又叫黑白模式,它只能用黑色和白色表示图像。
由于位图模式无法将色调复杂的图像完整的表现出来,因此,不宜用它来表现色调复杂的图像,但可以用此模式来处理黑白线稿或处理特殊的两色调高反差图像
在Photoshop中不能将彩色图像直接转化为位图模式,必须先将此彩色图像转化为灰度模式,在转化为位图模式,转化后有几种不同的显示模式:
50%阀值、图案仿色、扩散仿色和半调网屏。
四、实验要求
通过学习PHOTOSHOP的基本操作,制作以下三种图像编辑效果图。
1.海市蜃楼效果
试验要求:
用数码照自己的照片,采用图形合并等技术,将自己的照片移植至提供的风景图片中,制造出海市蜃楼效果。
预览成品:
成品:
2.换脸技术
试验要求:
选择一张明星照片,将自己用数码照的照片中的脸换明星的脸,得到你的脸和明星的身材的新明星组合体。
成品:
3.特殊字体
试验要求:
将自己的名字、班级、学号等信息制作成如下字体中的任一种:
发光字,火焰字,霓虹字,立体字。
试验中选择了燃烧字,操作过程如下:
效果图:
操作过程:
1.用File菜单的New命令,或者使用快捷键“Ctrl+N”新建一个Grayscale(灰度)模式的图像文件,背景填充为黑色。
2.使用文本工具
在图像中输入“燃烧”两字,颜色为白色。
3.调整文字的位置,然后使用Layer图层菜单的合并图层。
4.选择Image图像菜单的RotateCavas旋转画布选项,执行90CW命令,将图像顺时针旋转90度。
5.选择Filter滤镜菜单中的Stylize风格化项,执行Wind(风吹)滤镜。
选择对话框中的“风”项,“方向”栏中的“从右”项。
然后按Ctrl+F组合键,再次使用刚使用过的Wind滤镜,加强风吹效果。
6.再使用Image图像菜单RotateCanvas画布旋转中的90CCW命令,将图像逆时针旋转90度。
7.选择Filter滤镜菜单中的Distort(扭曲)项,执行Ripple(波浪)滤镜使火焰飘起来。
8.选择Image图像菜单中的Mode“模式”/“索引”项,将图像转换为IndexedColor模式。
9.再次选择Image图像菜单中的Mode模式项,执行ColorTable“颜色表”命令,打开ColorTable对话框,在Table列表中选择BlackBody“黑体”色表。
10.再次选择Image图像菜单中的Mode模式项,执行RGBColor命令,将图像转换为RGB模式。
完成燃烧字的制作。
成果:
五、实验总结
这是第一次做多媒体实验,充满了新鲜感。
加上之前本身对于photoshop的喜爱,觉得本次实验很充实,学到了很多。
通过这次实验,让我对图像的采集与编辑,文字的特殊处理等有了比以前更深的了解。
更加深了我对于ps的兴趣,在接下来的日子里,我一定会更加潜心的钻研photoshop的更强大的功能。
实验2波形音频播放器
一、实验目的
1.了解Wave文件格式,并学习Windows下用MCI函数播放Wave文件。
2.熟悉多媒体开发工具——VisualC++。
3.制作波形音频播放器。
其运行界面如下图所示:
要求此播放器具有打开、播放、录制及保存波形音频文件的功能。
二、预备知识
1.VC6编程方法,MCI编程方法。
2.Wave文件的结构
用.wav为扩展名的文件格式称为波形文件格式(WAVEFileFormat),它是一种资源交换文件格式(ResourceInterchangeFileFormat,RIFF),RIFF格式是面向部分(chunk)的,一个RIFF文件是由一个或多个部分组成的,其中每一个部分都指向下一个部分。
下图是一个RIFF文件结构的示意:
波形文件格式支持存储各种采样频率和样本精度的声音数据,并支持声音数据的压缩。
一个WAVE文件至少包含三个块RIFF块是其中 最大的,整个WAVE文件就是一个RIFF块。
Cksize紧跟在“RIFF”CKID之后出现,它包含一个值,等于文件的大小减去8个字节,这8个字节用来存储RIFF的CKID和CKSIZE。
第二和第三块称为子块,包含在RIFF块之中。
这些块的第一个块是“fmt”块,包含PCMWAVEFORMAT结构所需要的信息;第二个块“data”块紧跟在“fmt”之后,包含所有的数据波形。
RIFF的CKSIZE等于“fmt”块和“data”块所占用的字节之和。
为了读写RIFF文件,用户使用为多媒体块信息准备的叫MMCKINFO的标准的数据结构。
在VC中这个结构定义为:
typedefsruct{
FOURCCckid;
DWORDcksize;
FOURCCfccType;
DWORDdwDataOffset;
DWORDdwFlags;
}MMCKINFO;
设计多媒体程序,关键是对多种多媒体设备的控制和使用,在Windows操作系统中,对多媒体设备进行控制主要有三种方法:
第一种方法是使用微软公司窗口系统中对多媒体支持的MCI,即媒体控制接口,MCI是多媒体设备和多媒体应用软件之间进行设备无关的沟通的桥梁。
在VB和VC中MCI都得到了很好的支持;第二种方法,通过调用Windows的API(应用程序接口)多媒体相关函数实现媒体控制;第三种方法是使用OLE(ObjectLinking&Embedding),即对象嵌入和链接技术,它为不同数据之间共享数据和资源提供了有利的手段。
三、实验步骤:
1.用VC建立应用程序框架:
a)打开文件菜单,点击新建,在弹出的对话框中选中MFCAppWizard(exe)后,选好你文件所需存储的目录,然后在工程中填入工程文件名,如下图所示:
点击确定按钮在弹出的对话框中,按下图进行设置后,点击“完成”。
b)编制应用程序界面:
各控件的属性如下表所示:
控件
ID
标题
控件
ID
标题
GroupBox
IDC_STATIC
波形音频信息
Static
IDC_RESOLUTION
Static
IDC_STATIC
波形文件:
Static
IDC_WAVE_LENGTH
Static
IDC_STATIC
声道:
Button
IDC_OPEN
打开
Static
IDC_STATIC
采样率:
Button
IDC_PLAY
播放
Static
IDC_STATIC
音频长度:
Button
IDC_RECORD
录制
Static
IDC_WAVE_NAME
Button
IDC_SAVE
保存
Static
IDC_CHANNEL
Button
IDC_STOP
停止
Static
IDC_SAMPLE_RATE
Picture
IDC_WAVE_GRAPH
c)点击查看建立类向导,在MessageMaps中建立相应的消息函数OnOpen(),OnPlay(),OnRecord(),OnSave(),OnStop(),点击确定。
2.建立处理波形音频的类CWaveAudio:
工程添加工程ComponentsandControls,选中WaveAudio.ogx文件插入,可重用类CWaveAudio便添加到工程中。
在CWavePlayerDlg类的头文件中将CWaveAudio的头文件包含进来。
3.加入所需的功能:
a)在CWavePlayerDlg类中加入以下成员变量
CStringpath;//文件目录
CWaveAudiom_Wave;//可重用类的对象
intINFO_WAVEWIDE;//绘图框的宽度
intINFO_WAVEDEEP;//绘图框的高度
boolm_bOpen;//判断是否有波形音频文件打开
右键点击Class中的CWavePlayerDlg,选中AddNumberFunction,如下所示,将绘图函数
voidDrawWave(HDChdc,unsignedintx,unsignedinty,char*path)加到CWavePlayerDlg中。
b)在BOOLCWavePlayerDlg:
:
OnInitDialog()中进行初始化:
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(false);
m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(false);
c)在OnOpen(),OnPlay(),OnRecord(),OnSave(),OnStop()中添加代码如下:
voidCWavePlayerDlg:
:
OnOpen()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringFilter,str;
Filter="波形音频文件(*.WAV)|*.WAV||";
CFileDialogFileDlg(true,NULL,NULL,OFN_HIDEREADONLY,Filter);
if(FileDlg.DoModal()==IDOK)
{
if(!
m_Wave.Load(FileDlg.GetFileName()))
{
MessageBox("不能打开文件!
","错误",MB_OK|MB_ICONSTOP);
}
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(true);
}
path=FileDlg.GetPathName();
SetDlgItemText(IDC_WAVE_NAME,FileDlg.GetFileName());
str.Format("%5.3f",m_Wave.GetSampleRate()/1000.);
str+=_T("kHZ");
SetDlgItemText(IDC_SAMPLE_RATE,str);
str.Empty();
switch(m_Wave.GetChannel())
{
case1:
str="单声道";
break;
case2:
str="立体声";
break;
}
SetDlgItemText(IDC_CHANNEL,str);
str.Empty();
str.Format("%d",m_Wave.GetResolution());
str+="位";
SetDlgItemText(IDC_RESOLUTION,str);
str.Empty();
str.Format("%2.2u:
%02.2f:
%02.2u",m_Wave.GetWaveLength()/1000/60,
m_Wave.GetWaveLength()/1000.,m_Wave.GetWaveLength()/1000/3600);
SetDlgItemText(IDC_WAVE_LENGTH,str);
m_bOpen=true;
}
voidCWavePlayerDlg:
:
OnPlay()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_Wave.Play();
}
voidCWavePlayerDlg:
:
OnRecord()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(false);
m_pWnd=GetDlgItem(IDC_OPEN);
m_pWnd->EnableWindow(false);
m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(false);
m_Wave.Record();
}
voidCWavePlayerDlg:
:
OnSave()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringFilter;
Filter="WaveFile(*.WAV)|*.WAV||";
CFileDialogFileDlg(false,NULL,NULL,OFN_OVERWRITEPROMPT,Filter);
FileDlg.m_ofn.lpstrDefExt="wav";
if(FileDlg.DoModal()==IDOK)
m_Wave.Save(FileDlg.GetPathName());
}
voidCWavePlayerDlg:
:
OnStop()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(true);
m_pWnd=GetDlgItem(IDC_OPEN);
m_pWnd->EnableWindow(true);
m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(true);
m_Wave.Stop();
}
现在可以编译运行一下,可以发现你已经实现了绝大多数的功能。
d)现在,我们将绘图功能添加进去,由于对话框的变动都会触发调用OnPaint()函数重绘客户区,我们在OnPaint()中加入以下代码:
voidCWavePlayerDlg:
:
OnPaint()
{
if(IsIconic())
{
……
}
else
{
CDialog:
:
OnPaint();
if(m_bOpen)
{
CWnd*m_pWnd;
CRectrect;
m_pWnd=GetDlgItem(IDC_WAVE_GRAPH);
m_pWnd->GetClientRect(rect);
INFO_WAVEWIDE=rect.Width();
INFO_WAVEDEEP=rect.Height();
CClientDCdc(m_pWnd);
DrawWave(dc.m_hDC,rect.left,rect.top,(char*)path.operatorLPCTSTR());
}
}
}
我们就在OnPaint()中调用了DrawWave函数绘制波形,DrawWave函数的代码如下:
voidCWavePlayerDlg:
:
DrawWave(HDChdc,unsignedintx,unsignedinty,char*path)
{
HMMIOh;
MMCKINFOmmParent,mmSub;//MMCKINFO结构中包含了有关部分的信息
GLOBALHANDLEgh;
PCMWAVEFORMATwaveformat;//fmt部分结构
char*p;
unsignedlongnextsample;
longafactor;
unsignedinti,n,amp;
int*ip;
HPENOldPen=(HPEN)SelectObject(hdc,GetStockObject(BLACK_PEN));
HBRUSHOldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(WHITE_BRUSH));
Rectangle(hdc,x,y,x+INFO_WAVEWIDE,y+INFO_WAVEDEEP);
if((h=mmioOpen(path,NULL,MMIO_READ))==NULL)
return;
mmParent.fccType=mmioFOURCC('W','A','V','E');
if(mmioDescend(h,(LPMMCKINFO)&mmParent,NULL,MMIO_FINDRIFF))
{
mmioClose(h,0);
return;
}
mmSub.ckid=mmioFOURCC('f','m','t','');
if(mmioDescend(h,(LPMMCKINFO)&mmSub,(LPMMCKINFO)&mmParent,MMIO_FINDCHUNK))
{
mmioClose(h,0);
return;
}
n=min((unsignedint)mmSub.cksize,sizeof(PCMWAVEFORMAT));
if(mmioRead(h,(LPSTR)&waveformat,n)!
=(int)n)
{
mmioClose(h,0);
return;
}
if(waveformat.wf.wFormatTag!
=WAVE_FORMAT_PCM)
{
mmioClose(h,0);
return;
}
mmioAscend(h,&mmSub,0);//当读出一个部分的数据后,退出该部分
mmSub.ckid=mmioFOURCC('d','a','t','a');
if(mmioDescend(h,(LPMMCKINFO)&mmSub,(LPMMCKINFO)&mmParent,MMIO_FINDCHUNK))
{
mmioClose(h,0);
return;
}
if(waveformat.wBitsPerSample==8&&waveformat.wf.nChannels==1)
{
nextsample=mmSub.cksize/(long)INFO_WAVEWIDE;
afactor=2L*(255L/(long)INFO_WAVEDEEP);
}
elseif(waveformat.wBitsPerSample==8&&waveformat.wf.nChannels==1)
{
nextsample=2L*((mmSub.cksize/2L)/(long)INFO_WAVEWIDE);
afactor=2L*(255L/(long)INFO_WAVEDEEP);
}
elseif(waveformat.wBitsPerSample>8&&waveformat.wf.nChannels==1)
{
nextsample=2L*((mmSub.cksize/(long)INFO_WAVEWIDE))&0xfffffffeL;
afactor=2L*(65535L/(long)INFO_WAVEDEEP);
}
else
{
nextsample=4L*((mmSub.cksize/4L)/(long)INFO_WAVEWIDE)&0xfffffffeL;
afactor=2L*(65535L/(long)INFO_WAVEDEEP);
}
MoveToEx(hdc,x,y+INFO_WAVEDEEP/2,NULL);
LineTo(hdc,x+INFO_WAVEWIDE,y+INFO_WAVEDEEP/2);
if((gh=GlobalAlloc(GMEM_MOVEABLE,mmSub.cksize))!
=NULL)
{
if((p=(char*)GlobalLock(gh))!
=NULL)
{
if(mmioRead(h,p,mmSub.cksize)==mmSub.cksize)
{
for(i=0;i { ip=(int*)p; if(waveformat.wBitsPerSample==8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多媒体 实验 报告