第6章 圖形與多媒體處理_第1頁
第6章 圖形與多媒體處理_第2頁
第6章 圖形與多媒體處理_第3頁
第6章 圖形與多媒體處理_第4頁
第6章 圖形與多媒體處理_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第6章圖形與多媒體處理技術(shù),主要內(nèi)容,6.1 繪制幾何圖形 6.1.1幾何圖形繪制類 6.1.2幾何圖形繪制過程 6.2 觸摸屏事件處理 6.2.1 簡單觸摸屏事件 6.2.2 手勢識別 6.3 音頻播放 6.3.1多媒體處理包 6.3.2多媒體處理播放器MediaPlayer 6.4 視頻播放 6.4.1 應(yīng)用媒體播放器(MediaPlayer)播放視頻,6.4.2 應(yīng)用視頻視圖(VideoView)播放視頻 6.5 錄音與拍照 6.5.1 用于錄音錄像的MediaRecorder類 6.5.2 錄音示例 6.5.3 拍照 6.6 文本轉(zhuǎn)換成語音 6.7 圖像處理技術(shù) 6.7.1 處理圖像的

2、顏色矩陣 6.7.2 處理圖像的坐標(biāo)變換矩陣,6.1 繪制幾何圖形,6.1.1幾何圖形繪制類,在Android系統(tǒng)中繪制幾何圖形,需要用到一些繪圖工具,這些繪圖工具都在android.graphics包中。,1、畫布Canvas,2、畫筆Paint,畫筆Paint用來描述所繪制圖形的顏色、和風(fēng)格,如線條寬度、顏色等信息。,3、點(diǎn)到點(diǎn)的連線路徑Path,當(dāng)繪制由一些線段組成的圖形(如:三角形、四邊形等),需要用Path類來描述線段路徑。,6.1.2幾何圖形繪制過程,在Android中繪制幾何圖形的一般過程為: (1)創(chuàng)建一個(gè)View的子類,并重寫View類的onDraw()方法; (2)在Vie

3、w的子類視圖中使用畫布對象Canvas繪制各種圖形; (3)使用invalidate()方法刷新畫面。,【例6-1】繪制幾何圖形示例。,本例繼承自Android.view.View的 TestView類,重寫 View類的onDraw()方法,在onDraw()方法中運(yùn)用Paint對象(繪筆)的不同設(shè)置值,在Cavas(畫布)上繪制圖形,分別繪制了矩形、圓形、三角形和文字。,(代碼詳見教材),【例6-2】繪制一個(gè)可以在任意指定位置顯示的小球。,設(shè)計(jì)思想:Android系統(tǒng)應(yīng)用程序的設(shè)計(jì)模式是采用MVC模式,即把應(yīng)用程序分為表現(xiàn)層(View)、控制層(Control)、業(yè)務(wù)模型層(Model)。

4、在本示例中,按照這種模式,圖形界面布局為表現(xiàn)層,Activity控制程序?yàn)榭刂茖樱瑢?shí)現(xiàn)幾何作圖的繪制過程屬于業(yè)務(wù)模型層。在業(yè)務(wù)模型層,將圓心坐標(biāo)設(shè)為(x, y),則圓的位置隨控制層任意輸入的坐標(biāo)值而改變。,(代碼詳見教材),6.2 觸摸屏事件處理,6.2.1 簡單觸摸屏事件,簡單觸摸屏事件指的是在觸摸屏按下、抬起、移動(dòng)事件(模擬器中為鼠標(biāo)事件)。在Android系統(tǒng)中,通過OnTouchListener監(jiān)聽接口來處理屏幕事件,當(dāng)在View的范圍內(nèi)觸摸按下、抬起或滑動(dòng)等動(dòng)作時(shí)都會觸發(fā)該事件。,在設(shè)計(jì)簡單觸摸屏事件程序時(shí),要實(shí)現(xiàn)android.view.View.OnTouchListener接口

5、,并重寫該接口的監(jiān)聽方法onTouch(View v, MotionEvent event)。 在監(jiān)聽方法onTouch(View v, MotionEvent event)中,參數(shù)v為事件源對象;參數(shù)event為事件對象,事件對象為下列常數(shù)之一: MotionEvent.ACTION_DOWN 按下; MotionEvent.ACTION_UP 抬起; MotionEvent.ACTION_MOVE 移動(dòng)。,【例6-3】設(shè)計(jì)一個(gè)在屏幕上移動(dòng)小球的程序。,設(shè)計(jì)一個(gè)繼承于Android.view.View的圖形繪制視圖 TestView,在該視圖中繪制一個(gè)小球。再設(shè)計(jì)一個(gè)實(shí)現(xiàn)OnTouchLis

6、tener監(jiān)聽接口的類,重寫該接口的監(jiān)聽方法onTouch(View v, MotionEvent event),該方法監(jiān)聽并獲取觸摸屏幕的坐標(biāo)位置,并把坐標(biāo)值傳遞給圖形繪制類TestView,由TestView在該位置重繪小球。,(代碼詳見教材),【例6-4】設(shè)計(jì)一個(gè)能在圖片上涂鴉的程序。,(代碼詳見教材),6.2.2 手勢識別,所謂手勢識別,就是識別手指(或鼠標(biāo))在屏幕上劃動(dòng)時(shí)的軌跡。在Android系統(tǒng)中,android.gesture是用于創(chuàng)建、識別和保存觸摸屏手勢功能的包。 在實(shí)現(xiàn)OnGesturePerformedListener接口時(shí),需要復(fù)蓋其方法: onGesturePerf

7、ormed(GestureOverlayView overlay, Gesture gesture),【例6-5】設(shè)計(jì)一個(gè)手寫字體識別程序。,要編寫一個(gè)手寫字體識別程序,必須先建立一個(gè)存放手寫字體的數(shù)據(jù)庫。 在手機(jī)模擬器中已經(jīng)預(yù)裝了創(chuàng)建手寫字體數(shù)據(jù)庫的應(yīng)用程序Gestures Builder,其圖標(biāo)如圖所示。,創(chuàng)建手勢庫如圖6.6所示。由手勢創(chuàng)建的手寫字體將被保存到/sdcard/gestures中,把文件gestures復(fù)制到項(xiàng)目/res/raw下,就可以在應(yīng)用程序里面使用這些手勢了。 (代碼詳見教材),6.3 音頻播放,6.3.1多媒體處理包,android.media包中的主要類,6.3

8、.2多媒體處理播放器MediaPlayer,1、MediaPlayer類的常用方法,2、MediaPlayer對象的生命周期,通常把一個(gè)對象從創(chuàng)建、使用、直到釋放該對象的過程稱為該對象的生命周期。,6.3.3播放音頻文件,通過媒體處理器MediaPlayer提供的方法不僅可以播放存放在SD卡上音樂文件而且還能播放資源中的音樂文件。這二者之間在設(shè)計(jì)方法上稍有不同。,1、構(gòu)建MediaPlayer對象,(1)使用new的方式創(chuàng)建MediaPlayer對象 對于播放SD卡上的音樂文件需要使用new方式來創(chuàng)建MediaPlayer對象: MediaPlayer mplayer = new MediaP

9、layer(); (2)使用create方法的方式創(chuàng)建MediaPlayer對象 對于播放資源中的音樂需要使用create方法的方式來創(chuàng)建MediaPlayer對象,如: MediaPlayer mplayer = MediaPlayer.create(this, R.raw.test);,2、設(shè)置播放文件,MediaPlayer要播放的文件主要包括3個(gè)來源: (1)存儲在SD卡或其他文件路徑下的媒體文件 對于存儲在SD卡或其他文件路徑下的媒體文件,需要調(diào)用setDataSource()方法,例如: mplayer.setDataSource(/sdcard/test.mp3);,(2)在編寫

10、應(yīng)用程序時(shí)事先存放在res資源中的音樂文件 播放事先存放在資源目錄resraw中的音樂文件,需要在使用create()方法創(chuàng)建MediaPlayer對象時(shí),就指定資源路徑和文件名稱(不要帶擴(kuò)展名)。由于create()方法的源代碼中已經(jīng)封裝了調(diào)用setDataSource()方法,因此不必重復(fù)使用setDataSource()方法。,(3)網(wǎng)絡(luò)上的媒體文件 播放網(wǎng)絡(luò)上的音樂文件,需要調(diào)用setDataSource()方法,例如: mplayer.setDataSource(,3、對播放器進(jìn)行同步控制,使用prepare()方法設(shè)置對播放器的同步控制,例如: mplayer.prepare();

11、 如果MediaPlayer對象是由create方法創(chuàng)建的,由于create()方法的源代碼中已經(jīng)封裝了調(diào)用prepare()方法,因此可省略此步驟。,4、播放音頻文件,start()是真正啟動(dòng)音頻文件播放的方法,如: mplayer.start(); 如要暫停播放或停止播放,則調(diào)用 pause()和stop()方法。,5、釋放占用資源,音頻文件播放結(jié)束應(yīng)該調(diào)用release()釋放播放器占用的系統(tǒng)資源。 如要重新播放音頻文件,需要調(diào)用reset()返回到空閑狀態(tài),再從第2步開始重復(fù)其他各步驟。,【例6-6】設(shè)計(jì)一個(gè)音樂播放器。,在本示例中,將分別播放存放在項(xiàng)目資源中的音樂文件和SD卡中的音頻

12、文件,因此需要事先將準(zhǔn)備好的音頻文件保存在指定路徑下。 (1)將測試的音頻文件mtest1.mp3復(fù)制到新建項(xiàng)目的“resraw”目錄下; (2)將音頻文件mtest2.mp3復(fù)制到SD卡中,(在模擬器中使用SD卡,可以在Eclipse集成環(huán)境中,選擇“DDMS”調(diào)試工具,單擊“向設(shè)備導(dǎo)入文件”按鍵,將音頻文件復(fù)制到模擬器的“/mnt/sdcard/Music”目錄下,如圖6.9所示)。,將音頻文件存放到模擬器的SD卡內(nèi),(代碼詳見教材),6.4 視頻播放,在Android系統(tǒng)中,設(shè)計(jì)播放視頻的應(yīng)用程序有兩種不同方式: 一種方式是應(yīng)用媒體播放器MediaPlayer組件播放視頻; 另一種方式是

13、應(yīng)用視頻視圖VideoView組件播放視頻。,6.4.1 應(yīng)用媒體播放器(MediaPlayer)播放視頻,媒體播放器MediaPlayer不僅可以播放音頻文件,而且還可以播放格式為.3gp的視頻文件。 與播放音頻不同之處為,用于視頻播放的播放承載體必須是實(shí)現(xiàn)了表面視圖處理接口(surfaceHolder)的視圖組件,即需要使用SurfaceView組件來顯示播放的視頻圖像。,【例6-7】應(yīng)用媒體播放器MediaPlayer設(shè)計(jì)一個(gè)視頻播放器。,事先準(zhǔn)備好視頻文件sample.3gp,并將其復(fù)制到模擬器的SD卡sdcard/zsm目錄下。 (代碼詳見教材),6.4.2 應(yīng)用視頻視圖(Video

14、View)播放視頻,在Android系統(tǒng)中,經(jīng)常使用android.widget包中的視頻視圖類VideoView播放視頻文件。 VideoView 類可以從不同的來源(例如資源文件或內(nèi)容提供器) 讀取圖像,計(jì)算和維護(hù)視頻的畫面尺寸以使其適用于任何布局管理器, 并提供一些諸如縮放、著色之類的顯示選項(xiàng)。,android.widget.VideoView類的常用方法,【例6-8】應(yīng)用視頻視圖VideoView組件設(shè)計(jì)一個(gè)視頻播放器。,(代碼詳見教材),6.5 錄音與拍照,6.5.1 用于錄音錄像的MediaRecorder類,6.5.2 錄音示例,應(yīng)用MediaRecorder進(jìn)行錄音頻,其主要步

15、驟如下。 (1)創(chuàng)建錄音對象 MediaRecorder mRecorder = new MediaRecorder();,(2)錄音對象的設(shè)置 設(shè)置音頻源 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 設(shè)置輸出格式 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 設(shè)置編碼格式 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 設(shè)置輸出文件路徑 mRecorder.setO

16、utputFile(path);,(3)錄制準(zhǔn)備 mRecorder.prepare(); (4)開始錄制 mRecorder.start(); (5)錄制結(jié)束 停止錄制 mRecorder.stop(); 重置 mRecorder.reset(); 釋放錄音占用的有關(guān)資源 mRecorder.release();,【例6-9】設(shè)計(jì)一個(gè)簡易錄音機(jī)。,在配置文件AndroidManifest.xml中要增加音頻捕獲權(quán)限的語句。 音頻捕獲權(quán)限: SD卡的寫操作權(quán)限: (代碼詳見教材,真實(shí)手機(jī)上才能實(shí)現(xiàn)錄音功能),6.5.3 拍照,使用android.hardware包中的Camera類可以獲取當(dāng)前

17、設(shè)備中的照相機(jī)服務(wù)接口,從而實(shí)現(xiàn)照相機(jī)的拍照功能。,1、照片服務(wù)Camera類,takePicture方法有3個(gè)參數(shù): 第1個(gè)參數(shù)shutter是關(guān)閉快門事件的回調(diào)接口; 第2個(gè)參數(shù)raw是獲取照片事件的回調(diào)接口; 第3個(gè)參數(shù)jpeg也是獲取照片事件的回調(diào)接口。 第2個(gè)參數(shù)與第3個(gè)參數(shù)的區(qū)別在于回調(diào)函數(shù)中傳回的數(shù)據(jù)內(nèi)容。第2個(gè)參數(shù)指定的回調(diào)函數(shù)中傳回的數(shù)據(jù)內(nèi)容是照片的原數(shù)據(jù),而第3個(gè)參數(shù)指定的回調(diào)函數(shù)中傳回的數(shù)據(jù)內(nèi)容是已經(jīng)按照J(rèn)PEG格式進(jìn)行編碼的數(shù)據(jù)。,2、實(shí)現(xiàn)拍照服務(wù)的主要步驟,(1)創(chuàng)建照相機(jī)對象 通過Camera類的open()方法創(chuàng)建一個(gè)照相機(jī)對象 Camera camera=Cam

18、era.open(); (2)設(shè)置參數(shù) 創(chuàng)建設(shè)置照相機(jī)參數(shù)的Parameters對象,并設(shè)置相關(guān)參數(shù) parameters = mCamera.getParameters();,(3)對照片預(yù)覽 通過照相機(jī)對象的startPreview()方法和stopPreview()方法啟動(dòng)或停止對照片的預(yù)覽。 (4)照片拍攝 使用照相機(jī)接口的takePicture()方法可以異步地進(jìn)行照片拍攝。 通過照片事件的回調(diào)接口PictureCallback,可以獲取照相機(jī)所得到的圖片數(shù)據(jù),從而可以進(jìn)行下一步的行動(dòng),例如保存到本地存儲、進(jìn)行數(shù)據(jù)壓縮、通過可視組件顯示。 (5)停止照相 通過照相機(jī)對象的releas

19、e()方法可以斷開與照相機(jī)設(shè)備的連接,并釋放與該照相機(jī)接口有關(guān)的資源。 camera.release(); camera=null;,【例6-10】設(shè)計(jì)一個(gè)簡易照相機(jī)。,設(shè)計(jì)照相機(jī),為了取景,需要應(yīng)用SurfaceView組件來顯示攝像頭所能拍照的景物,再使用回調(diào)接口SurfaceHolder.Callback監(jiān)控取景視圖,Callback接口有3個(gè)方法需要實(shí)現(xiàn): surfaceCreated(SurfaceHolder holder)方法,用于初始化; surfaceChanged(SurfaceHolder holder, int format, int width, int height

20、)方法,當(dāng)景物發(fā)生變化時(shí)觸發(fā); surfaceDestroyed(SurfaceHolder holder)方法,釋放對象時(shí)觸發(fā)。,在配置文件AndroidManifest.xml增加允許操作SD卡和使用攝像頭設(shè)備的語句: ,(代碼詳見教材,要在真實(shí)手機(jī)上運(yùn)行),6.6 文本轉(zhuǎn)換成語音,將文本內(nèi)容轉(zhuǎn)換成語音TextToSpeech簡稱 TTS,Android的TextToSpeech組件可以方便的嵌入到游戲或者使用程序中,增強(qiáng)用戶體驗(yàn)。 在應(yīng)用TextToSpeech設(shè)計(jì)文本轉(zhuǎn)換語音程序時(shí),還要實(shí)現(xiàn)OnInitListener接口,并覆蓋onInit(int status)方法。在onInit

21、(int status)方法中,對語音引擎進(jìn)行初始化設(shè)置。,文本轉(zhuǎn)換語音TextToSpeech常用方法,【例6-11】應(yīng)用TextToSpeech設(shè)計(jì)文本轉(zhuǎn)換語音程序。,(代碼詳見教材),由于Android系統(tǒng)默認(rèn)安裝的TTS是Pico TTS,它不支持中文,因此,需要下載安裝另外的第三方語音包,通常可以使用Svox、eSpeak等。下載安裝后打開設(shè)置/語音輸入和輸出/文字轉(zhuǎn)語音設(shè)置,勾選Svox Classic TTS項(xiàng),其語言選擇中文。經(jīng)設(shè)置后,TextToSpeech組件就可以使用中文普通話發(fā)音了。,6.7 圖像處理技術(shù),6.7.1 處理圖像的顏色矩陣,1、矩陣變換處理圖像顏色原理 在

22、android系統(tǒng)中可以通過顏色矩陣ColorMatrix類來表示和處理圖像的顏色,顏色矩陣ColorMatrix是一個(gè)45 的矩陣。,設(shè)顏色矩陣A,第一行表示R紅色分量,第二行表示G綠色分量,第三行表示B藍(lán)色分量,第四行表示透明度;顏色矩陣的第五列表示各個(gè)顏色的偏移量。如圖所示。,在數(shù)字圖像處理中,通過R、G、B、A四個(gè)通道可以操作對應(yīng)顏色,從而做出各種特殊的顏色效果。顏色矩陣可以方便的用來修改RGBA各分量的值,達(dá)到控制各顏色通道變化的目的。,(1)保持原有顏色不變的顏色矩陣,如果把這個(gè)矩陣作用于各顏色分量的話,R=A*C,計(jì)算后會發(fā)現(xiàn),各個(gè)顏色分量實(shí)際上沒有任何的改變(R = R G =

23、 G B = B A = A)。,1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0,A =,(2)改變顏色分量,這個(gè)矩陣紅色分量增加100,綠色分量增加100,這樣的效果就是圖像偏黃,因?yàn)榧t色和綠色混合后得到黃色,黃色增加了100,達(dá)到了泛黃的舊照片的效果。,1 0 0 0 100 0 1 0 0 100 0 0 1 0 0 0 0 0 1 0,A =,2、顏色矩陣ColorMatrix的常用方法,【例6-12】應(yīng)用顏色矩陣變換改變圖像顏色。,在本例中,從屏幕界面輸入顏色矩陣數(shù)據(jù),通過矩陣變換,改變圖像的顏色。其工作過程如下: 1、從文本編輯框中獲取輸入的數(shù)據(jù),將

24、數(shù)據(jù)轉(zhuǎn)換為浮點(diǎn)類型后,存放到數(shù)組carray中; 2、用數(shù)組carray構(gòu)建顏色矩陣; 3、通過顏色矩陣對顏色通道過濾,再用畫布繪制一個(gè)新的圖像。,界面布局,在圖形界面布局文件中,設(shè)置了一個(gè)自定義的視圖MyView,其id為“imageView1”。再設(shè)置了20個(gè)文本編輯框editText1editText20,用于輸入顏色矩陣的數(shù)據(jù)值,為了直觀性,定義一個(gè)表格布局TableLayout,將20個(gè)文本編輯框按4行5列的形式排列。,(2)自定義繼承于View的視圖MyView.java,在MyView類中,定義了一個(gè)setValues()方法,將20個(gè)文本編輯框中輸入的數(shù)據(jù)賦值給顏色矩陣。重定義了onDraw()方法,根據(jù)輸入的數(shù)據(jù)設(shè)置顏色矩陣,再調(diào)用Can

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論