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

下載本文檔

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

文檔簡(jiǎn)介

1、第6章圖形與多媒體處理技術(shù),主要內(nèi)容,6.1 繪制幾何圖形 6.1.1幾何圖形繪制類(lèi) 6.1.2幾何圖形繪制過(guò)程 6.2 觸摸屏事件處理 6.2.1 簡(jiǎn)單觸摸屏事件 6.2.2 手勢(shì)識(shí)別 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類(lèi) 6.5.2 錄音示例 6.5.3 拍照 6.6 文本轉(zhuǎn)換成語(yǔ)音 6.7 圖像處理技術(shù) 6.7.1 處理圖像的

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

3、w的子類(lèi)視圖中使用畫(huà)布對(duì)象Canvas繪制各種圖形; (3)使用invalidate()方法刷新畫(huà)面。,【例6-1】繪制幾何圖形示例。,本例繼承自Android.view.View的 TestView類(lèi),重寫(xiě) View類(lèi)的onDraw()方法,在onDraw()方法中運(yùn)用Paint對(duì)象(繪筆)的不同設(shè)置值,在Cavas(畫(huà)布)上繪制圖形,分別繪制了矩形、圓形、三角形和文字。,(代碼詳見(jiàn)教材),【例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)幾何作圖的繪制過(guò)程屬于業(yè)務(wù)模型層。在業(yè)務(wù)模型層,將圓心坐標(biāo)設(shè)為(x, y),則圓的位置隨控制層任意輸入的坐標(biāo)值而改變。,(代碼詳見(jiàn)教材),6.2 觸摸屏事件處理,6.2.1 簡(jiǎn)單觸摸屏事件,簡(jiǎn)單觸摸屏事件指的是在觸摸屏按下、抬起、移動(dòng)事件(模擬器中為鼠標(biāo)事件)。在A(yíng)ndroid系統(tǒng)中,通過(guò)OnTouchListener監(jiān)聽(tīng)接口來(lái)處理屏幕事件,當(dāng)在View的范圍內(nèi)觸摸按下、抬起或滑動(dòng)等動(dòng)作時(shí)都會(huì)觸發(fā)該事件。,在設(shè)計(jì)簡(jiǎn)單觸摸屏事件程序時(shí),要實(shí)現(xiàn)android.view.View.OnTouchListener接口

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

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

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

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

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

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

11、 如果MediaPlayer對(duì)象是由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),再?gòu)牡?步開(kāi)始重復(fù)其他各步驟。,【例6-6】設(shè)計(jì)一個(gè)音樂(lè)播放器。,在本示例中,將分別播放存放在項(xiàng)目資源中的音樂(lè)文件和SD卡中的音頻

12、文件,因此需要事先將準(zhǔn)備好的音頻文件保存在指定路徑下。 (1)將測(cè)試的音頻文件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),(代碼詳見(jiàn)教材),6.4 視頻播放,在A(yíng)ndroid系統(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組件來(lái)顯示播放的視頻圖像。,【例6-7】應(yīng)用媒體播放器MediaPlayer設(shè)計(jì)一個(gè)視頻播放器。,事先準(zhǔn)備好視頻文件sample.3gp,并將其復(fù)制到模擬器的SD卡sdcard/zsm目錄下。 (代碼詳見(jiàn)教材),6.4.2 應(yīng)用視頻視圖(Video

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

15、驟如下。 (1)創(chuàng)建錄音對(duì)象 MediaRecorder mRecorder = new MediaRecorder();,(2)錄音對(duì)象的設(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)開(kāi)始錄制 mRecorder.start(); (5)錄制結(jié)束 停止錄制 mRecorder.stop(); 重置 mRecorder.reset(); 釋放錄音占用的有關(guān)資源 mRecorder.release();,【例6-9】設(shè)計(jì)一個(gè)簡(jiǎn)易錄音機(jī)。,在配置文件AndroidManifest.xml中要增加音頻捕獲權(quán)限的語(yǔ)句。 音頻捕獲權(quán)限: SD卡的寫(xiě)操作權(quán)限: (代碼詳見(jiàn)教材,真實(shí)手機(jī)上才能實(shí)現(xiàn)錄音功能),6.5.3 拍照,使用android.hardware包中的Camera類(lèi)可以獲取當(dāng)前

17、設(shè)備中的照相機(jī)服務(wù)接口,從而實(shí)現(xiàn)照相機(jī)的拍照功能。,1、照片服務(wù)Camera類(lèi),takePicture方法有3個(gè)參數(shù): 第1個(gè)參數(shù)shutter是關(guān)閉快門(mé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ī)對(duì)象 通過(guò)Camera類(lèi)的open()方法創(chuàng)建一個(gè)照相機(jī)對(duì)象 Camera camera=Cam

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

19、e()方法可以斷開(kāi)與照相機(jī)設(shè)備的連接,并釋放與該照相機(jī)接口有關(guān)的資源。 camera.release(); camera=null;,【例6-10】設(shè)計(jì)一個(gè)簡(jiǎn)易照相機(jī)。,設(shè)計(jì)照相機(jī),為了取景,需要應(yīng)用SurfaceView組件來(lái)顯示攝像頭所能拍照的景物,再使用回調(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)方法,釋放對(duì)象時(shí)觸發(fā)。,在配置文件AndroidManifest.xml增加允許操作SD卡和使用攝像頭設(shè)備的語(yǔ)句: ,(代碼詳見(jiàn)教材,要在真實(shí)手機(jī)上運(yùn)行),6.6 文本轉(zhuǎn)換成語(yǔ)音,將文本內(nèi)容轉(zhuǎn)換成語(yǔ)音TextToSpeech簡(jiǎn)稱(chēng) TTS,Android的TextToSpeech組件可以方便的嵌入到游戲或者使用程序中,增強(qiáng)用戶(hù)體驗(yàn)。 在應(yīng)用TextToSpeech設(shè)計(jì)文本轉(zhuǎn)換語(yǔ)音程序時(shí),還要實(shí)現(xiàn)OnInitListener接口,并覆蓋onInit(int status)方法。在onInit

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

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論