版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
西華大學(xué)實驗報告(理工類)開課學(xué)院及實驗室:實驗時間:2016年11月2日學(xué)生姓名魏俊旭學(xué)號3120140802334成績學(xué)生所在學(xué)院電氣與電子信息學(xué)院年級/專業(yè)/班2014/信息工程/3班課程名稱實用程序設(shè)計與實例分析課程代碼實驗項目名稱實驗五:圖形圖像和多媒體編程練習(xí)項目代碼指導(dǎo)教師郭奕項目學(xué)分、實驗?zāi)康?、掌握使用GDI+來進(jìn)行繪圖的方法。2、掌握直接使用GDI+進(jìn)行數(shù)據(jù)圖形展示的方法。3、會使用C#S行簡單的圖像處理。4、在C#中可以使用幾種控件進(jìn)行聲音或者視頻的播放。5、了解DirectX是微軟開發(fā)的多媒體應(yīng)用程序接口(API)。二、實驗原理1、GDI(GraphicsDeviceInterface,圖形設(shè)備接口)主要用于在windows平臺上編寫圖形程序,從程序設(shè)計的角度看,GDI包才GDI對象和GDI函數(shù)兩部分。2、Graphics類封裝了一個GDI+繪圖圖面,提供將對象繪制到顯示設(shè)備的方法,Graphics與特定的設(shè)備上下文關(guān)聯(lián),畫圖方法都被包括在Graphics類中。3、GDI+(GraphicsDeviceInterfacePlus,圖形設(shè)備接口)提供了各種豐富的圖形圖像處理功能。4、在C#中進(jìn)行圖像處理一般都是通過Image類及其派生類來實現(xiàn)的。Image類封裝了對BMPGIF、JPGEXIF、PNGTIFF和ICON圖像文件的調(diào)入、格式轉(zhuǎn)換以及簡單的處理功能。5、Bitmap對象封裝了GDI+中的一個位圖,此位圖由圖形圖像及其屬性的像素數(shù)據(jù)組成。6、GetPixel方法和SetPixel方法:獲取和設(shè)置一個圖像的指定像素的顏色。7、在C#中可以使用Soundplayer類播放wav聲音,使用WindowsAPI播放MP3,使用WindowsMediaPlayer控件播放音頻或視頻,使用ShockWaveFlash控件播放Flash文件。8、在C#中,可以引用Windows自帶的WindowsMediaPlayer組件播放多種格式的音頻文件和視頻文件,所支持的音頻文件和視頻文件格式由電腦系統(tǒng)安裝的解碼器決定。三、實驗設(shè)備、儀器及材料Windows環(huán)境計算機(jī)、VisualStudio2012軟件四、實驗步驟(按照實際操作過程)
(一)圖像處理程序1、要求:利用C#創(chuàng)建一個如圖1所示的圖像處理程序,對圖像進(jìn)行底片效果、浮雕效果和黑白效果的變換顯示。圖12、具體的實現(xiàn)步驟參考教材132頁案例5-4.(二)媒體播放程序設(shè)計1、要求:利用WindowsMediaPlayer組建實現(xiàn)一個如圖2所示的多媒體播放器。2、具體的實現(xiàn)步驟參考教材139頁案例5-5.五、實驗過程記錄(數(shù)據(jù)、圖表、計算等)
實驗1定義打開按鈕打開圖片選擇privatevoidbutton1Click1(objectsender,EventArgse)(DialogResultdr=openFileDialog1.ShowDialog();if(dr==DialogResult.OK)//如果用戶選擇了打開{stringfileName=this.openFileDialog1.FileName;//獲取選擇的文件//下面進(jìn)行你所要進(jìn)行的操作吧foreach(Controlcontrolinthis.Controls)PictureBox)control).SizeMode=PictureBoxSizeMode.StretchImage;if(controlisPictureBox){PictureBox)control).SizeMode=PictureBoxSizeMode.StretchImage;((((((PictureBox)control).Image=Image.FromFile(fileName);}窗體加載時調(diào)用openFileDialog1對象的方法初始化privatevoidForm1Load(objectsender,EventArgse){openFileDialog1.FileName="";//初始文件名為空//openFileDialog1.Filter="文本文件|**|C#文件|*cs|所有文件|**";//篩選選擇文件的類型openFileDialog1.RestoreDirectory=true;//在對話框關(guān)閉前還原當(dāng)前目錄openFileDialog1.FilterIndex=1;//默認(rèn)選擇文件類型的索引為1}底片效果處理方法privatevoidbutton1Click(objectsender,EventArgse){//以底片效果顯示圖像try{intHeight=this.pictureBox1.Image.Height;intWidth=this.pictureBox1.Image.Width;Bitmapnewbitmap=newBitmap(Width,Height);Bitmapoldbitmap=(Bitmap)this.pictureBox1.Image;Colorpixel;for(intx=1;x<Width;x++)(for(inty=1;y<Height;y++)(intr,g,b;pixel=oldbitmap.GetPixel(x,y);r=255-pixel.R;g=255-pixel.G;b=255-pixel.B;newbitmap.SetPixel(x,y,Color.FromArgb(r,g,b));}}this.pictureBox2.Image=newbitmap;}catch(Exceptionex)(MessageBoxIcon.Information);MessageBoxShow(ex.Message,"信息提示",MessageBoxButtons.OK,}MessageBoxIcon.Information);}浮雕效果privatevoidbutton2Click(objectsender,EventArgse)(//以浮雕效果顯示圖像try(intHeight=this.pictureBox1.Image.Height;intWidth=this.pictureBox1.Image.Width;BitmapnewBitmap=newBitmap(Width,Height);BitmapoldBitmap=(Bitmap)this.pictureBox1.Image;Colorpixel1,pixel2;for(intx=0;x<Width-1;x++){for(inty=0;y<Height-1;y++){intr=0,g=0,b=0;pixel1=oldBitmap.GetPixel(x,y);pixel2=oldBitmap.GetPixel(x+1,y+1);r=Math.Abs(pixel1.R-pixel2.R+128);g=Math.Abs(pixel1.G-pixel2.G+128);b=Math.Abs(pixel1.B-pixel2.B+128);if(r>255)r=255;if(r<0)r=0;if(g>255)g=255;if(g<0)g=o;if(b>255)b=255;if(b<0)b=0;newBitmap.SetPixel(x,y,Color.FromArgb(r,g,b));))this.pictureBox2.Image=newBitmap;MessageBoxShow(ex.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);))黑白效果(灰度圖片)privatevoidbutton3Click(objectsender,EventArgse){//以黑白效果顯示圖像try{intHeight=this.pictureBox1.Image.Height;intWidth=this.pictureBox1.Image.Width;BitmapnewBitmap=newBitmap(Width,Height);BitmapoldBitmap=(Bitmap)this.pictureBox1.Image;Colorpixel;for(intx=0;x<Width;x++)for(inty=0;y<Height;y++){pixel=oldBitmap.GetPixel(x,y);intr,g,b,Result=0;r=pixel.R;g=pixel.G;b=pixel.B;Result=((int)(0.299*r)+(int)(0.587*g)+(int)(0.114*b));newBitmap.SetPixel(x,y,Color.FromArgb(Result,Result,Result));)this.pictureBox2.Image=newBitmap;}catch(Exceptionex)(MessageBoxShow(ex.Message,"信息提示");))基于暗通道優(yōu)先的圖像去霧算法算法原理對于任何圖片,其暗通道可以定義為產(chǎn)心二圖eL既/⑶)卜首先:在計算機(jī)益黨和計算機(jī)因形中:下述方程,所描述的霧圖格或稹至笠廣泛使用:+另[1-K行卜其中,『CO就是現(xiàn)在已經(jīng)有的耋像,即待去霧的回繳,“公是要佚宸的無霧的青像,參數(shù)A是全球大氣光成分,K6為透射率*現(xiàn)在的已知條件就是火力,要求目標(biāo)面根據(jù)基本的代數(shù)知識可知這一個育無數(shù)解的方程.只有在一些先整信息基砒上才能求出定罪"這貨是透射率f00的預(yù)先值.中考廖到當(dāng)選射圖工的值很小時,會導(dǎo)致j的值偏大:從而史至獴夏律向白揚過度:因此一般可以設(shè)置一個廨值%,當(dāng)E值小于。時,令土=%,后續(xù)的示例程序均采用%=51為標(biāo)在計算.因此.最姿的酎像恢復(fù)公式如下fQ..「⑺-A/⑺―氏]+'代碼privatevoidbutton4Click(objectsender,EventArgse)//基于暗通道優(yōu)先的圖像去霧算法//計算圖像的暗像素點intHeight=this.pictureBox1.Image.Height;intWidth=this.pictureBox1.Image.Width;BitmapnewBitmap=newBitmap(Width,Height);BitmapoldBitmap=(Bitmap)this.pictureBox1.Image;Colorcdarkpixel;for(intx=0;x<Width;x++)for(inty=0;y<Height;y++)(cdarkpixel=oldBitmap.GetPixel(x,y);intResult=0;Result=(int)(cdarkpixel.R>cdarkpixel.G?cdarkpixel.G>cdarkpixel.Bcdarkpixel.B:cdarkpixel.G:cdarkpixel.R>cdarkpixel.B?cdarkpixel.B:cdarkpixel.R);newBitmap.SetPixel(x,y,Color.FromArgb(Result,Result,Result));}//計算圖像的高斯模糊之后的暗通道inti,j;Colorc1=newColor();Colorc2=neWColor();Colorc3=neWColor();Colorc4=neWColor();Colorc5=neWColor();Colorc6=neWColor();Colorc7=neWColor();Colorc8=neWColor();Colorc9=neWColor();Colorcc=neWColor();for(i=1;i<=pictureBox1.Image.Width-2;i++)(for(j=1;j<=pictureBox1.Image.Height-2;j++)|(c1=01dBitmap.GetPixel(i,j-1);c2=01dBitmap.GetPixel(i-1,j);c3=oldBitmap.GetPixel(i,j);c4=oldBitmap.GetPixel(i+1,j);c5=oldBitmap.GetPixel(i,j+1);c6=01dBitmap.GetPixel(i-1,j-1);c7=01dBitmap.GetPixel(i-1,j+1);c8=oldBitmap.GetPixel(i+1,j-1);c9=oldBitmap.GetPixel(i+1,j+1);int[]temp=newint[]{c1.R,c2.R,c3.R,c4.R,c5.R,c6.R,c7.R,c8.R,c9.R};intming=min(temp,9);cc=Color.FromArgb(255-ming,255-ming,255-ming);newBitmap.SetPixel(i,j,cc);}}//計算大氣折射率AintX=0,丫=0,tem=0;ColorcApixel;for(intx=0;x<Width;x++)for(inty=0;y<Height;y++)(cApixel=newBitmap.GetPixel(x,y);intiValue=cApixel.R;if(iValue>tem)(}ColorcAcolor=01dBitmap.GetPixel(X,Y);intcARed=cAcolor.R;intcAGreen=cAcolor.G;intcABlue=cAcolor.B;ColorcoApixel;double[,]dt=newdouble[Width,Height];//計算透射系數(shù)tfor(intx=0;x<Width;x++)for(inty=0;y<Height;y++)(coApixel=newBitmap.GetPixel(x,y);intg=coApixel.R;dt[x,y]=1-(0.95*(((double)g/tem)));if(dt[x,y]<0.58)dt[x,y]=0.58;}//去霧算法Colorcrepixel;for(intx=0;x<Width;x++)for(inty=0;y<Height;y++)crepixel=oldBitmap.GetPixel(x,y);intiReRed=((int)((crepixel.R-cARed)/dt[x,y]))+cARed;intiReGreen=(int)((crepixel.G-cAGreen)/dt[x,y])+cAGreen;intiReBlue=(int)((crepixel.B-cABlue)/dt[x,y])+cABlue;if(iReRed>255)iReRed=255;if(iReGreen>255)iReGreen=255;if(iReBlue>255)iReBlue=255;if(iReRed<0)newBitmap.SetPixel(x,y,Color.FromArgb(iReRed,iReGreen,iReBlue));)this.pictureBox2.Image=newBitmap;)catch(Exceptionex){MessageBoxShow(ex.Message,"信息提示");))高斯濾波算法原理,席斯分布privatevoidgaussianClick(objectsender,EventArgse)//高斯濾波Colorc1=newColor();Colorc2=newColor();Colorc3=newColor();Colorc4=newColor();Colorc5=newColor();Colorc6=newColor();Colorc7=newColor();Colorc8=newColor();Colorc9=newColor();intHeight=this.pictureBoxl.Image.Height;intWidth=this.pictureBox1.Image.Width;_|BitmapnewBitmap=newBitmap(Width,Height);BitmapoldBitmap=newBitmap(this.pictureBox1.Image);intrr,r1,r2,r3,r4,r5,r6,r7,r8,r9,i,j,fxr,fxg,fxb,gg,bb;for(i=1;i<=pictureBox1.Image.Width-2;i++){for(j=1;j<=pictureBox1.Image.Height-2;j++){c1=01dBitmap.GetPixel(i,j-1);c2=01dBitmap.GetPixel(i-1,j);c3=01dBitmap.GetPixel(i,j);c4=01dBitmap.GetPixel(i+1,j);c5=01dBitmap.GetPixel(i,j+1);c6=01dBitmap.GetPixe1(i-1,j-1);c7=01dBitmap.GetPixe1(i-1,j+1);c8=01dBitmap.GetPixe1(i+1,j-1);c9=01dBitmap.GetPixe1(i+1,j+1);r1=c1.R;r2=c2.R;r3=c3.R;r4=c4.R;|r5=c5.R;|r6=c6.R;r7=c7.R;r8=c8.R;r9=c9.R;fxr=(r6+r7+r8+r9+2*r1+2*r2+2*r4+2*r5+4*r3)/16;rr=fxr;c1=01dBitmap.GetPixe1(i,j-1);c2=01dBitmap.GetPixe1(i-1,j);c3=01dBitmap.GetPixe1(i,j);c4=01dBitmap.GetPixe1(i+1,j);c5=01dBitmap.GetPixe1(i,j+1);c6=01dBitmap.GetPixe1(i-1,j-1);c7=01dBitmap.GetPixe1(i-1,j+1);c8=01dBitmap.GetPixe1(i+1,j-1);c9=01dBitmap.GetPixe1(i+1,j+1);r1=c1.G;r2=c2.G;r3=c3.G;r4=c4.G;r5=c5.G;r6=c6.G;r7=c7.G;r8=c8.G;r9=c9.G;fxg=(r6+r7+r8+r9+2*ri+2*r2+2*r4+2*r5+4*r3)/16;gg=fxg;ci=oldBitmap.GetPixel(i,j-1);c2=oldBitmap.GetPixel(i-1,j);c3=oldBitmap.GetPixel(i,j);c4=oldBitmap.GetPixel(i+1,j);c5=01dBitmap.GetPixel(i,j+1);c6=oldBitmap.GetPixel(i-1,j-1);c7=oldBitmap.GetPixel(i-1,j+1);c8=oldBitmap.GetPixel(i+1,j-1);c9=oldBitmap.GetPixel(i+1,j+1);r1=c1.B;r2=c2.B;r3=c3.B;r4=c4.B;r5=c5.B;r6=c6.B;r7=c7.B;r8=c8.B;r9=c9.B;fxb=(r6+r7+r8+r9+2*ri+2*r2+2*r4+2*r5+4*r3)/16;bb=fxb;Colorcc=Color.FromArgb(rr,gg,bb);newBitmap.SetPixel(i,j,cc);))this.pictureBox2.Image=newBitmap;
圖1底片效果圖2浮雕效果圖3灰度圖片
圖4圖像去霧圖4圖像去霧圖5高斯濾波(高斯噪聲圖由Matlab產(chǎn)生,方差為0.2,均值為0.6)實驗二定義類來封裝屬性classPlayitem(///<summary>///節(jié)目素材的名稱///</summary>stringprogramName;publicstringProgramName(get{returnprogramName;}set{programName=value;}}///<summary>〃/節(jié)目素材的全路徑///</summary>stringprogramFullPath;publicstringProgramFullPath(get{returnprogramFullPath;}set{programFullPath=value;}}///<summary>///用毫秒表示的素材長度///</summary>doubleprogramLengthInMS;publicdoubleProgramLengthInMS{get{returnprogramLengthInMS;}set{programLengthInMS=value;}}}///用于保存播放列表的數(shù)據(jù)///</summary>List<PlayItem>ToPlayList=newList<PlayItem>()定義添加文件的按鈕的方法privatevoidbuttonaddClick(objectsender,EventArgse){OpenFileDialogTmpDlg=newOpenFileDialog();TmpDlg.Multiselect=true;TmpDlg.Filter="音頻文件|*mp3;*aac;*wav;*s48|視頻文件|*avi;*mp4;*mpg;*mpeg"if(TmpDlg.ShowDialog()==System.Windows.Forms.DialogResult.OK){PlayItemTmpPlayItem;foreach(stringTmpIteminTmpDlg.FileNames){TmpPlayItem=newPlayItem();TmpPlayItem.ProgramName=Path.GetFileNameWithoutExtension(TmpItem);TmpPlayItem.ProgramFullPath=TmpItem;ToPlayList.Add(TmpPlayItem);}//刷新列表顯示this.UpdateListDisplay();|}}
刷新播放列表中的信息privatevoidUpdateListDisplay()if(ToPlayList==null||ToPlayList.Count==0)this.listView1.Items.Clear();return;}this.listView1.BeginUpdate();this.listView1.Items.Clear();foreach(PlayItemTmpIteminToPlayList)(ListViewItemlvi=newListViewItem();lvi.Text=TmpItem.ProgramName;this.listView1.Items.Add(lvi);this.listView1.Items.Add(lvi);刪除按鈕的方法privatevoidbuttondeleteClick(objectsender,EventArgse)(if(this.listView1.SelectedItems==null||this.listView1.SelectedItems.Count<=0)(return;}try(ToPlayList.RemoveAt(this.listView1.SelectedItems[0].Index);this.UpdateListDisplay();}catch(Exceptionex)(MessageBoxShow("代碼有錯");}}開始播放按鈕的方法privatevoidbuttonStartClick(objectsender,EventArgse)//形成一個播放列表"newlist","");axWindowsMediaPlayer1.currentPlaylist.clear();"newlist","");axWindowsMediaPlayer1.currentPlaylist=axWindowsMediaPlayer1.newPlaylist(foreach(PlayitemTmpIteminToPlayList)(1axWindowsMediaPlayer1.currentPlaylist.appenditem(axWindowsMediaPlayer1.newMedia(Tmpitem.ProgramFullPath));)axWindowsMediaPlayerl.settings.autoStart=true;//開始播放this.axWindowsMediaPlayer1.Ctlcontrols.play();)停止播放privatevoidbuttonStopClick(objectsender,EventArgse)(this.axWindowsMediaPlayerl.Ctlcontr01s.stop();)圖6運行結(jié)果程序5-5的BUG已經(jīng)完全刪掉了列表里的所有播放文件,但是依然存在piI"ehMi上?Hd代“幻“舵區(qū)』””!t''riI?片Mihtwi*1hMUeRTt—im-hLL11diUi"IeVitLAvmmW.af?#nri繼續(xù)選擇名稱刪除,會出現(xiàn)程序異常,這里
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 消費品行業(yè)投資咨詢合同(2篇)
- 二零二五年度三人合伙設(shè)立醫(yī)療設(shè)備銷售公司的合作協(xié)議2篇
- 法院勞務(wù)合同(2篇)
- 二零二五年度消防清包工合同范本:消防設(shè)施維修與技術(shù)支持3篇
- 二零二五年度葡萄酒年份酒拍賣會合作合同4篇
- 二零二五年度新能源汽車充電站土地租賃協(xié)議
- 二零二五年度中企動力南京分公司勞務(wù)派遣合作協(xié)議
- 二零二五年度梅安與王莉的離婚財產(chǎn)分割協(xié)議子女撫養(yǎng)及贍養(yǎng)
- 二零二五年度離婚協(xié)議書簡本:婚內(nèi)協(xié)議修改2篇
- 二零二五年度股東借款給企業(yè)專項合作協(xié)議
- 電力溝施工組織設(shè)計-電纜溝
- 《法律援助》課件
- 小兒肺炎治療與護(hù)理
- 《高處作業(yè)安全》課件
- 春節(jié)后收心安全培訓(xùn)
- 小學(xué)教師法制培訓(xùn)課件
- 電梯操作證及電梯維修人員資格(特種作業(yè))考試題及答案
- 市政綠化養(yǎng)護(hù)及市政設(shè)施養(yǎng)護(hù)服務(wù)方案(技術(shù)方案)
- SLT824-2024 水利工程建設(shè)項目文件收集與歸檔規(guī)范
- 鍋爐本體安裝單位工程驗收表格
- 報價單(產(chǎn)品報價單)
評論
0/150
提交評論