版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
多媒體實(shí)驗(yàn)報(bào)告姓名:學(xué)號(hào):專業(yè)班級(jí):授課老師:實(shí)驗(yàn)1圖像采集與編輯實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康牧私鈹?shù)碼相機(jī)基本使用。熟悉PHOTOSHOP在圖像處理上的用途。掌握PHOTOSHOP一些基本的圖像操作。實(shí)驗(yàn)內(nèi)容用數(shù)碼相機(jī)拍攝照片。將照片采集到電腦中處理。運(yùn)用PHOTOSHOP進(jìn)行圖像的編輯與創(chuàng)作。實(shí)驗(yàn)預(yù)備知識(shí)ADOBEPHOTOSHOP是Thomas和JohnKnoll倆兄弟設(shè)計(jì)制作,而后與Adobe公司合作,于1989年推行的一個(gè)集傳統(tǒng)的暗房技術(shù)和印前處理功能于一體的綜合圖像處理軟件,它將設(shè)計(jì)師和使用者集于一體,給圖形設(shè)計(jì)界增添了巨大的活力。位圖即點(diǎn)陣圖是由許多小方格的不同色塊組成的圖像,其中每一個(gè)小方格被稱為像素。Photoshop是一個(gè)位圖處理軟件,它可以真實(shí)的再現(xiàn)色彩豐富的世界。由于位圖文件在存儲(chǔ)時(shí)必須記錄其組成畫面中每一個(gè)像素的位置、色彩等數(shù)據(jù),因此它的文件信息量大,分辨率越高,信息量越大。分辨率就是單位(英寸)長度所含像素的多少,單位為dpi。分辨率可分為圖像分辨率、輸出分辨率、掃描分辨率等,分辨率是決定圖像輸入、輸出質(zhì)量高低的關(guān)鍵。在一個(gè)數(shù)字化圖像中,圖像的尺寸、分辨率和文件的大小這三項(xiàng)之間是相互聯(lián)系的。當(dāng)用戶決定了其中任意亮相,便可決定第三項(xiàng)的參數(shù):文件的大小=圖像的分辨率×圖像尺寸。位圖模式又叫黑白模式,它只能用黑色和白色表示圖像。由于位圖模式無法將色調(diào)復(fù)雜的圖像完整的表現(xiàn)出來,因此,不宜用它來表現(xiàn)色調(diào)復(fù)雜的圖像,但可以用此模式來處理黑白線稿或處理特殊的兩色調(diào)高反差圖像在Photoshop中不能將彩色圖像直接轉(zhuǎn)化為位圖模式,必須先將此彩色圖像轉(zhuǎn)化為灰度模式,在轉(zhuǎn)化為位圖模式,轉(zhuǎn)化后有幾種不同的顯示模式:50%閥值、圖案仿色、擴(kuò)散仿色和半調(diào)網(wǎng)屏。實(shí)驗(yàn)要求通過學(xué)習(xí)PHOTOSHOP的基本操作,制作以下三種圖像編輯效果圖。海市蜃樓效果試驗(yàn)要求:用數(shù)碼照自己的照片,采用圖形合并等技術(shù),將自己的照片移植至提供的風(fēng)景圖片中,制造出海市蜃樓效果。預(yù)覽成品:換臉技術(shù)試驗(yàn)要求:選擇一張明星照片,將自己用數(shù)碼照的照片中的臉換明星的臉,得到你的臉和明星的身材的新明星組合體。預(yù)覽成品:特殊字體試驗(yàn)要求:將自己的名字、班級(jí)、學(xué)號(hào)等信息制作成如下字體中的任一種:發(fā)光字,火焰字,霓虹字,立體字。發(fā)光字效果:五、實(shí)驗(yàn)總結(jié)本次實(shí)驗(yàn)中我學(xué)到了很多關(guān)PS的知識(shí),在這里我要謝謝老師的耐心教學(xué)和實(shí)驗(yàn)室老師的指導(dǎo)。這次實(shí)驗(yàn)讓我們?cè)趯W(xué)到實(shí)用知識(shí)的同時(shí),也迅速提高了動(dòng)手實(shí)踐能力,為迅速跨入平面設(shè)計(jì)領(lǐng)域打下很好的的基礎(chǔ)。我覺得多媒體技術(shù)的學(xué)習(xí)是很重要的,多媒體的應(yīng)用現(xiàn)在也越來越多,比如處理圖片,制作相冊(cè)這些在生活的是會(huì)常常用到的。如果這些也不會(huì),我想是會(huì)很麻煩的。在這半學(xué)期的學(xué)習(xí)中我了解了多媒體技術(shù)的基本概念,基本要素,基本原理,基本掌握一些軟件的使用。通過今天的實(shí)驗(yàn)我認(rèn)識(shí)到,多媒體技術(shù)是指通過計(jì)算機(jī)技術(shù)把文字、圖形、圖像、活動(dòng)影像和聲音等多媒體信息,進(jìn)行綜合處理和管理,使計(jì)算機(jī)成為能以人類習(xí)慣的方式提供信息服務(wù)的一種新技術(shù)。利用多媒體技術(shù)能給學(xué)生提供界面友好、形象直觀的交互式學(xué)習(xí)環(huán)境,能給學(xué)生提供圖文聲并茂的多重感官綜合刺激,還能讓學(xué)生按超文本方式組織與管理各種教學(xué)信息和學(xué)科知識(shí),這將對(duì)學(xué)生認(rèn)知結(jié)構(gòu)的形成與發(fā)展起到積極的作用。當(dāng)前科技發(fā)展異常迅猛,每個(gè)人,不管是教師還是學(xué)生都必須不斷學(xué)習(xí)?,F(xiàn)代化教學(xué)手段能利用多種媒體組合,優(yōu)化教學(xué)過程,突破教學(xué)重點(diǎn)、難點(diǎn),提高教學(xué)質(zhì)量和效率,學(xué)生參與和學(xué)習(xí)積極主動(dòng)性,也可以得到充分的發(fā)揮。教師首先通過自學(xué)及時(shí)掌握最新的科技成果,豐富教學(xué)內(nèi)容,提高教學(xué)質(zhì)量,改變滿堂灌的教學(xué)模式,在給學(xué)生提供自學(xué)條件的基礎(chǔ)上,讓學(xué)生自主地學(xué)習(xí)。把信息技術(shù)與學(xué)科進(jìn)行整合,可以改變教材的觀念和形式,改變教學(xué)環(huán)境、手段和方法,變革教學(xué)模式,有利于面向全體同學(xué)發(fā)展個(gè)性,有利于學(xué)生進(jìn)行獲取信息,處理信息,提高學(xué)生自主學(xué)習(xí)的能力。因此,在強(qiáng)調(diào)素質(zhì)教育的今天,把信息技術(shù)與學(xué)科教學(xué)相結(jié)合是必要的而且也是緊迫的。實(shí)驗(yàn)2波形音頻播放器實(shí)驗(yàn)?zāi)康牧私釽ave文件格式,并學(xué)習(xí)Windows下用MCI函數(shù)播放Wave文件。熟悉多媒體開發(fā)工具——VisualC++。制作波形音頻播放器。其運(yùn)行界面如下圖所示:要求此播放器具有打開、播放、錄制及保存波形音頻文件的功能。預(yù)備知識(shí)VC6編程方法,MCI編程方法。Wave文件的結(jié)構(gòu)用.wav為擴(kuò)展名的文件格式稱為波形文件格式(WAVEFileFormat),它是一種資源交換文件格式(ResourceInterchangeFileFormat,RIFF),RIFF格式是面向部分(chunk)的,一個(gè)RIFF文件是由一個(gè)或多個(gè)部分組成的,其中每一個(gè)部分都指向下一個(gè)部分。下圖是一個(gè)RIFF文件結(jié)構(gòu)的示意:波形文件格式支持存儲(chǔ)各種采樣頻率和樣本精度的聲音數(shù)據(jù),并支持聲音數(shù)據(jù)的壓縮。一個(gè)WAVE文件至少包含三個(gè)塊RIFF塊是其中最大的,整個(gè)WAVE文件就是一個(gè)RIFF塊。Cksize緊跟在“RIFF”CKID之后出現(xiàn),它包含一個(gè)值,等于文件的大小減去8個(gè)字節(jié),這8個(gè)字節(jié)用來存儲(chǔ)RIFF的CKID和CKSIZE。第二和第三塊稱為子塊,包含在RIFF塊之中。這些塊的第一個(gè)塊是“fmt”塊,包含PCMWAVEFORMAT結(jié)構(gòu)所需要的信息;第二個(gè)塊“data”塊緊跟在“fmt”之后,包含所有的數(shù)據(jù)波形。RIFF的CKSIZE等于“fmt”塊和“data”塊所占用的字節(jié)之和。為了讀寫RIFF文件,用戶使用為多媒體塊信息準(zhǔn)備的叫MMCKINFO的標(biāo)準(zhǔn)的數(shù)據(jù)結(jié)構(gòu)。在VC中這個(gè)結(jié)構(gòu)定義為: typedefsruct{ FOURCCckid; DWORDcksize; FOURCCfccType; DWORDdwDataOffset; DWORDdwFlags; }MMCKINFO;設(shè)計(jì)多媒體程序,關(guān)鍵是對(duì)多種多媒體設(shè)備的控制和使用,在Windows操作系統(tǒng)中,對(duì)多媒體設(shè)備進(jìn)行控制主要有三種方法:第一種方法是使用微軟公司窗口系統(tǒng)中對(duì)多媒體支持的MCI,即媒體控制接口,MCI是多媒體設(shè)備和多媒體應(yīng)用軟件之間進(jìn)行設(shè)備無關(guān)的溝通的橋梁。在VB和VC中MCI都得到了很好的支持;第二種方法,通過調(diào)用Windows的API(應(yīng)用程序接口)多媒體相關(guān)函數(shù)實(shí)現(xiàn)媒體控制;第三種方法是使用OLE(ObjectLinking&Embedding),即對(duì)象嵌入和鏈接技術(shù),它為不同數(shù)據(jù)之間共享數(shù)據(jù)和資源提供了有利的手段。實(shí)驗(yàn)步驟:用VC建立應(yīng)用程序框架:打開文件菜單,點(diǎn)擊新建,在彈出的對(duì)話框中選中MFCAppWizard(exe)后,選好你文件所需存儲(chǔ)的目錄,然后在工程中填入工程文件名,如下圖所示:點(diǎn)擊確定按鈕在彈出的對(duì)話框中,按下圖進(jìn)行設(shè)置后,點(diǎn)擊“完成”。編制應(yīng)用程序界面:各控件的屬性如下表所示:控件ID標(biāo)題控件ID標(biāo)題GroupBoxIDC_STATIC波形音頻信息StaticIDC_RESOLUTIONStaticIDC_STATIC波形文件:StaticIDC_WAVE_LENGTHStaticIDC_STATIC聲道:ButtonIDC_OPEN打開StaticIDC_STATIC采樣率:ButtonIDC_PLAY播放StaticIDC_STATIC音頻長度:ButtonIDC_RECORD錄制StaticIDC_WAVE_NAMEButtonIDC_SAVE保存StaticIDC_CHANNELButtonIDC_STOP停止StaticIDC_SAMPLE_RATEPictureIDC_WAVE_GRAPH點(diǎn)擊查看建立類向?qū)?,在MessageMaps中建立相應(yīng)的消息函數(shù)OnOpen(),OnPlay(),OnRecord(),OnSave(),OnStop(),點(diǎn)擊確定。建立處理波形音頻的類CWaveAudio:工程添加工程ComponentsandControls,選中WaveAudio.ogx文件插入,可重用類CWaveAudio便添加到工程中。在CWavePlayerDlg類的頭文件中將CWaveAudio的頭文件包含進(jìn)來。加入所需的功能:在CWavePlayerDlg類中加入以下成員變量CStringpath;//文件目錄 CWaveAudiom_Wave;//可重用類的對(duì)象 intINFO_WAVEWIDE;//繪圖框的寬度 intINFO_WAVEDEEP;//繪圖框的高度 boolm_bOpen;//判斷是否有波形音頻文件打開右鍵點(diǎn)擊Class中的CWavePlayerDlg,選中AddNumberFunction,如下所示,將繪圖函數(shù)voidDrawWave(HDChdc,unsignedintx,unsignedinty,char*path)加到CWavePlayerDlg中。在BOOLCWavePlayerDlg::OnInitDialog()中進(jìn)行初始化:CWnd*m_pWnd; m_pWnd=GetDlgItem(IDC_PLAY); m_pWnd->EnableWindow(false); m_pWnd=GetDlgItem(IDC_SAVE); m_pWnd->EnableWindow(false);在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("不能打開文件!","錯(cuò)誤",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();} 現(xiàn)在可以編譯運(yùn)行一下,可以發(fā)現(xiàn)你已經(jīng)實(shí)現(xiàn)了絕大多數(shù)的功能。現(xiàn)在,我們將繪圖功能添加進(jìn)去,由于對(duì)話框的變動(dòng)都會(huì)觸發(fā)調(diào)用OnPaint()函數(shù)重繪客戶區(qū),我們?cè)贠nPaint()中加入以下代碼: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()中調(diào)用了DrawWave函數(shù)繪制波形,DrawWave函數(shù)的代碼如下:voidCWavePlayerDlg::DrawWave(HDChdc,unsignedintx,unsignedinty,char*path){ HMMIOh; MMCKINFOmmParent,mmSub;//MMCKINFO結(jié)構(gòu)中包含了有關(guān)部分的信息 GLOBALHANDLEgh; PCMWAVEFORMATwaveformat;//fmt部分結(jié)構(gòu) 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);//當(dāng)讀出一個(gè)部分的數(shù)據(jù)后,退出該部分 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<INFO_WAVEWIDE;) { ip=(int*)p; if(waveformat.wBitsPerSample==8&&waveformat.wf.nChannels==1) amp=(unsignedint)max(labs(((long)p[0]-128L)/afactor),1L); elseif(waveformat.wBitsPerSample==8&&waveformat.wf.nChannels==2) amp=(unsignedint)max(labs(((long)p[0]-128L+(long)p[1]-128L)/2)*/afactor,1L); elseif(waveformat.wBitsPerSample>8&&waveformat.wf.nChannels==1) amp=(unsignedint)max(labs((long)ip[0]/afactor),1L); else amp=(unsignedint)max(labs((((long)ip[0]+(long)ip[1])/2)/afactor),1L); if(amp>(unsignedint)INFO_WAVEDEEP/2) amp=INFO_WAVEDEEP/2-3; MoveToEx(hdc,x+i,y+(INFO_WAVEDEEP/2)-amp,NULL); LineTo(hdc,x+i,y+(INFO_WAVEDEEP/2)+amp); i+=2; p+=nextsample; } } GlobalUnlock(gh); } GlobalFree(gh); }SelectObject(hdc,OldPen); (HBRUSH)SelectObject(hdc,OldBrush); mmioClose(h,0); return;} 現(xiàn)在編譯執(zhí)行程序,一個(gè)簡單的波形音頻播放器已經(jīng)完成了。實(shí)驗(yàn)注意事項(xiàng):調(diào)試程序時(shí),Ctrl+F7為Compile,Build為F7,運(yùn)行時(shí)按F5。注意可重用類CwaveAudio的設(shè)計(jì)。熟練掌握MCI多媒體函數(shù)的應(yīng)用。編譯時(shí),菜單選中“項(xiàng)目”“設(shè)置”,要在庫的鏈接中加入winmm.lib。思考題a).什么是MCI接口?簡述MCI所囊括的內(nèi)容。答:MCI全稱是Mediacontrolinterface即多媒體控制接口。簡單的說,就是程序與多媒體解碼器通訊的一個(gè)界面。可利用這個(gè)接口跳過硬件訪問并調(diào)用本地符合MCI規(guī)格的多媒體解碼驅(qū)動(dòng),完成對(duì)多媒體的回放錄制與控制。從DX8之后MCI借助DirectShow和DirectMedia的強(qiáng)大支持成為了一個(gè)低技術(shù)難度,高性能,多功能的優(yōu)秀多媒體接口,可支持MPEG1/2/4視頻文件、QuickTime視頻文件、WindowsMediaVideo視頻文件和AVI視頻文件等多種Windows常見視頻的回放;還可支持MPC音頻、ADPCM音頻、AIFF音頻、MPEGLayer1\\Layer2\\Layer3音頻、WindowsMediaAudio音頻等常見音頻;另外MCI還嵌入了數(shù)字音樂合成器控制、錄音接口和基于DShow的攝像頭接口。其趣味性、可靠性和易用性特別適合初學(xué)API的編程愛好者。b).Windows下播放波形文件可采用幾種方法?各有什么有缺點(diǎn)?答:波形文件是多媒體系統(tǒng)中存放數(shù)字化聲音信息的標(biāo)準(zhǔn)格式文件。波形文件的高效播放是多媒體系統(tǒng)聲音處理技術(shù)的關(guān)鍵。Windows環(huán)境下波形文件有四種播放方法,四種方法各有自己的優(yōu)缺點(diǎn)。c).簡述Windows下多媒體程序開發(fā)的特點(diǎn)。答:Windows的API對(duì)很多多媒體內(nèi)容都可以支持。此外,directShow是非常重要的多媒體開發(fā)工具。WindowsMedia就是基于DirectShow的。五、實(shí)驗(yàn)總結(jié)經(jīng)過本次實(shí)驗(yàn),我掌握了VC++6.0的基本工具和音頻播放器的簡單制作,看起來很簡單,制作起來還真不容易。在做本實(shí)驗(yàn)時(shí),要先對(duì)程序代碼進(jìn)行理解,這樣做起來才能得心應(yīng)手。在制作的過程中出現(xiàn)了很多小問題,自己只能一點(diǎn)點(diǎn)摸索,在網(wǎng)上搜搜解決方法,最終還是把播放器做好了,雖然不是很精美,但是畢竟是自己一點(diǎn)一點(diǎn)做出來的,心里還是蠻高興的。我會(huì)在以后的學(xué)習(xí)中更加努力,做得更好。實(shí)驗(yàn)3數(shù)字視頻播放器實(shí)驗(yàn)?zāi)康倪M(jìn)一步掌握MCI函數(shù)的應(yīng)用。制作數(shù)字視頻播放器,并具有以下功能:打開視頻播放設(shè)備,播放視頻文件,可靜態(tài)觀看每一幀視頻,并且可設(shè)置播放速度,還能在全屏播放與正常播放之間轉(zhuǎn)換。實(shí)驗(yàn)步驟:如實(shí)驗(yàn)2建立應(yīng)用程序框架制作應(yīng)用程序界面制作對(duì)話框?qū)υ捒蚩丶傩员砜丶蘒D標(biāo)題控件ID標(biāo)題pictrueIDC_DISPLAYStaticIDC_PLAY_SOUNDGroupBoxIDC_STATIC視頻信息StaticIDC_FRAMESStaticIDC_STATIC視頻文件名:StaticIDC_DEMENSIONStaticIDC_STATIC播放速度:ButtonIDC_OPEN打開StaticIDC_STATIC是否靜音:ButtonIDC_PLAY播放StaticIDC_STATIC視頻幀數(shù):ButtonIDC_PAUSE暫停StaticIDC_STATIC視頻尺寸:ButtonIDC_PRE上一幀StaticIDC_VIDEO_NAMEButtonIDC_NEXT下一幀StaticIDC_PLAY_SPEEDButtonIDC_STOP停止現(xiàn)在在應(yīng)用程序中插入一個(gè)對(duì)話框資源,用來設(shè)置播放速度,其ID設(shè)為IDD_SPEED:IDD_SPEED對(duì)話框控件屬性表控件ID標(biāo)題EditBoxIDC_SPEEDButtonIDOK確定ButtonIDCANCEL取消還需象應(yīng)用程序中插入一個(gè)對(duì)話框資源,用做視頻輸出窗口,ID為IDD_DISPLAY。(2).制作菜單插入一個(gè)菜單資源,將ID設(shè)為IDR_MAINFRAME。IDR_MAINFRAME中的菜單項(xiàng)菜單標(biāo)題菜單項(xiàng)標(biāo)題ID文件打開IDC_OPEN關(guān)閉IDC_OK選項(xiàng)靜音IDC_SOUND全屏IDC_FULLSCREEN循環(huán)播放IDC_LOOP視頻速度IDC_SPEED在你的主對(duì)話框的屬性中的菜單項(xiàng)中,選中IDR_MAINFRAME現(xiàn)在編譯一下,就得到了我們所要的界面。(3).添加消息處理函數(shù)在C***Dlg中需要添加的消息處理函數(shù)ID消息IDC_PLAYBN_CLICKEDIDC_STOPBN_CLICKEDIDC_PAUSEBN_CLICKEDIDC_PREBN_CLICKEDIDC_NEXTBN_CLICKEDIDC_OPENBN_CLICKEDIDC_SPEEDCOMMANDIDC_FULLSCREENCOMMANDIDC_LOOPCOMMANDIDC_SOUNDCOMMANDC***DlgWM_TIMER然后為IDD_SPEED對(duì)話框資源添加一個(gè)intm_speed成員變量完成應(yīng)用程序功能設(shè)計(jì)將已設(shè)計(jì)好的類Cvideo加到你的工程中來,并使C***Dlg的頭文件包含該類的頭文件,然后在C***Dlg類的聲明中加入以下代碼:protected:CVideom_Video; boolm_bIsOpen; boolm_bSound; boolm_bLoop; boolm_bFullScreen; CDialog*display;初始化你的主對(duì)話框在OnInitDlialog()中//TODO:Addextrainitializationhere后加入以下代碼: display=newCDialog; display->Create(IDD_DISPLAY); SetTimer(1,100,NULL);完成消息函數(shù)OnTimer,OnOpen,OnPlay,OnStop,OnPause,OnPre,OnNext,OnSound,OnLoop,OnFullScreen,OnSpeedvoidCVideoPlayerDlg::OnTimer(UINTnIDEvent){ //TODO:Addyourmessagehandlercodehereand/orcalldefault CWnd*m_pWnd=GetDlgItem(IDC_PLAY); m_pWnd->EnableWindow(m_bIsOpen); m_pWnd=GetDlgItem(IDC_PAUSE); m_pWnd->EnableWindow(m_bIsOpen); m_pWnd=GetDlgItem(IDC_STOP); m_pWnd->EnableWindow(m_bIsOpen); m_pWnd=GetDlgItem(IDC_NEXT); m_pWnd->EnableWindow(m_bIsOpen); m_pWnd=GetDlgItem(IDC_PRE); m_pWnd->EnableWindow(m_bIsOpen); if(m_bIsOpen) { CStringInfo; Info.Format("當(dāng)前播放幀數(shù):%d",m_Video.GetFrame()); m_pWnd=GetDlgItem(IDC_DISPLAY);//獲得靜態(tài)圖像控件位置 CClientDCdc(m_pWnd); CRectrect; CBrushbrush(COLORREF(0)),*OldBrush; OldBrush=(CBrush*)dc.SelectObject(brush); m_pWnd->GetClientRect(rect);//獲得靜態(tài)圖像控件大小 dc.SetTextColor(COLORREFRGB(0,0,255)); dc.SetBkColor(COLORREFRGB(0,0,0)); dc.FillRect(rect,&brush); CSizesize=dc.GetTextExtent(Info);//獲得文本尺寸 dc.TextOut((rect.Width()-size.cx)/2,(rect.Height()-size.cy)/2,Info); dc.SelectObject(&OldBrush); CStringstr; str.Format("%d",m_Video.GetSpeed()); SetDlgItemText(IDC_PLAY_SPEED,str); str.Format("%d",m_Video.GetFrames()); SetDlgItemText(IDC_FRAMES,str); if(m_Video.GetSound()) str=_T("否"); else str=_T("是"); SetDlgItemText(IDC_PLAY_SOUND,str); } CDialog::OnTimer(nIDEvent);}voidCVideoPlayerDlg::OnOpen(){ //TODO:Addyourcontrolnotificationhandlercodehere CStringFilter,str; Filter="視頻文件(*.AVI)|*.AVI||"; //得到窗口尺寸 CRectrect; this->GetWindowRect(rect); CFileDialogFileDlg(true,NULL,NULL,OFN_HIDEREADONLY,Filter); if(FileDlg.DoModal()==IDOK)//單擊文件選擇對(duì)話框的“確定”鍵 { if(!m_Video.Open(FileDlg.GetPathName(),display,0,0))//打開視頻文件 { MessageBox("不能打開文件!","Error",MB_OK|MB_ICONSTOP); return; } //將顯示屏幕定位在主對(duì)話框的下方,并根據(jù)視頻大小確定屏幕大小 intBorder,Caption; Border=GetSystemMetrics(SM_CXSIZEFRAME); Caption=GetSystemMetrics(SM_CYCAPTION); display->SetWindowPos(this,rect.left+30,rect.bottom+30, m_Video.GetWidth()+Border,m_Video.GetHeight()+Caption+Border, SWP_SHOWWINDOW); display->ShowWindow(true); display->SetWindowText(FileDlg.GetFileName()); SetDlgItemText(IDC_VIDEO_NAME,FileDlg.GetFileName()); str.Format
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 考研政治輔導(dǎo)馬原
- 安全生產(chǎn)管理理念與案例分析
- 聯(lián)想猜詞游戲
- 車工工人轉(zhuǎn)正申請(qǐng)書15篇
- 2025年輪胎均勻性試驗(yàn)機(jī)項(xiàng)目合作計(jì)劃書
- 江蘇鹽城鹽城八校2025屆高三上學(xué)期開學(xué)考試化學(xué)試卷試題及答案解析
- 很好的高習(xí)參考計(jì)劃范文
- 駕校場地出租合同模板
- 技術(shù)設(shè)備融資租賃協(xié)議書
- 八年級(jí)語文上冊(cè)第二單元人物畫像6藤野先生高效教案新人教版
- 2024秋期國家開放大學(xué)本科《經(jīng)濟(jì)學(xué)(本)》一平臺(tái)在線形考(形考任務(wù)1至6)試題及答案
- 動(dòng)靜脈內(nèi)瘺成形術(shù)
- 法律意見書(適用于股權(quán)投資)
- JJF(蘇) 276-2024 接觸(觸針)式表面輪廓測量儀校準(zhǔn)規(guī)范
- 2024-2025學(xué)年五年級(jí)科學(xué)上冊(cè)第二單元《地球表面的變化》測試卷(教科版)
- 污泥(廢水)運(yùn)輸服務(wù)方案(技術(shù)方案)
- 2024-2030年中國降壓藥行業(yè)市場規(guī)模分析及發(fā)展趨勢與投資研究報(bào)告
- 二十屆三中全會(huì)精神應(yīng)知應(yīng)會(huì)知識(shí)測試30題(附答案)
- 一例下肢靜脈血栓疑難病例護(hù)理討論
- 2024年信息系統(tǒng)項(xiàng)目管理師題庫及答案
- 輸血相關(guān)法律法規(guī)臨床輸血安全管理課件
評(píng)論
0/150
提交評(píng)論