安卓APP源碼和設(shè)計(jì)報(bào)告——魔幻相機(jī)
Android大作業(yè)
學(xué) 院 計(jì)算機(jī)科學(xué)與工程學(xué)院
專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)一班
學(xué)生姓名
小組成員
學(xué)生學(xué)號(hào)
指導(dǎo)教師
課程編號(hào)
課程學(xué)分
起始日期
教師評(píng)語教師簽名:日期:成績(jī)?cè)u(píng)定備注
Android大作業(yè)
魔幻相機(jī)
一、選題背景
據(jù)統(tǒng)計(jì),中國目前已經(jīng)有4.874億手機(jī)用戶。大部分消費(fèi)者選擇手機(jī)產(chǎn)品的首要選擇之一就是手機(jī)的拍照功能、像素以及清晰度。尤其是女性人群,想要把人物等照片弄得好看又有意境。目前市場(chǎng)上雖然有Photoshop和Adobe Illustrator等專業(yè)圖像編輯軟件,但其學(xué)習(xí)門檻太高。因此我們小組制作出《美圖照相機(jī)》手機(jī)android軟件,為該人群提供便利。
該android軟件實(shí)現(xiàn)了基本拍照功能、圖片時(shí)間事件等分組功能、圖片濾鏡功能、圖片色彩調(diào)節(jié)功能。用戶可以隨時(shí)隨地使用該軟件進(jìn)行拍照、照片事件保存、照片濾鏡修改、照片色彩修改等,輕松獲得美觀大方的照片以及簡(jiǎn)潔的照片分類。
二、方案論證(設(shè)計(jì)理念)
基于JDK-1.8的開發(fā)平臺(tái),運(yùn)行于android API 12及以上平臺(tái),大部分android手機(jī)兼容該app。
該軟件主要運(yùn)用到android中的控件,異步加載,緩存等知識(shí)、java中的反射繼承多態(tài),內(nèi)部類知識(shí),色彩矩陣變換處理圖像、顏色數(shù)組及顏色分量實(shí)現(xiàn)濾鏡知識(shí)等等。
整個(gè)軟件可以分成四個(gè)模塊,拍照功能、照片分類功能、濾鏡功能、色彩調(diào)節(jié),圖片多點(diǎn)觸控功能。
拍照功能:
我們由于自己實(shí)現(xiàn)原生相機(jī)的難度較大,涉及圖像處理的知識(shí)較多,我們選擇android的隱式Intent來調(diào)用系統(tǒng)相機(jī)。
照片分類功能:
按照相片的時(shí)間進(jìn)行分類
使用緩存技術(shù)
濾鏡功能:
濾鏡是指安裝在相機(jī)鏡頭前過濾自然光的附加鏡頭,用來實(shí)現(xiàn)調(diào)色和添加效果。軟件實(shí)現(xiàn)的濾鏡可以模擬大部分的鏡頭濾鏡,如色溫變換濾鏡(LB)和強(qiáng)調(diào)濾鏡等.
軟件模擬鏡頭濾鏡中,實(shí)現(xiàn)濾鏡功能是對(duì)照片中的色彩進(jìn)行映射的過程。且可以為照片增加光線變化(如 LOMO 的暗角效果)、疊加材質(zhì)和應(yīng)用相框等等等,而我們采取最基本的顏色映射方法。 顏色映射是指將原來照片中的每一種顏色,通過某種映射方法轉(zhuǎn)換成另一種顏色,從而使圖片顯示出不同的色調(diào),改變圖片的意境。
色彩調(diào)節(jié)功能:
一張好的照片,除了要有好的內(nèi)容外,色彩和層次感也一定要分明。有彩色系的顏色具有三個(gè)基本特性:色相、純度(也稱彩度、飽和度)、明度
色相: 色相是有彩色的最大特征。其能夠比較確切地表示某種顏色色別的名稱。調(diào)節(jié)色相時(shí)會(huì)很直觀看到照片顯示的色調(diào)是藍(lán)、黃或其他顏色。
純度: 色彩的純度是指色彩的純凈程度,它表示顏色中所含有色成分的比例。含有色彩成分的比例愈大,則色彩的純度愈高,含有色成分的比例愈小,則色彩的純度也愈低。
明度:明度是指色彩的明亮程度。各種有色物體由于它們的反射光量的區(qū)別而產(chǎn)生顏色的明暗強(qiáng)弱。色彩的明度有兩種情況:一是同一色相不同明度,二是各種顏色的不同明度。
有彩色的色相、純度和明度三特征是不可分割的,通過改變圖片的飽和度、色溫、亮度來進(jìn)行調(diào)節(jié)圖片的色彩,從而使圖片色彩飽滿,別有韻味
圖片多點(diǎn)觸控功能:
實(shí)現(xiàn)了圖片的平移縮放等功能。具體為兩指或者多組放大縮小,圖片雙擊放大或者縮小,圖片平移。
三、過程論述
該android 軟件的實(shí)現(xiàn)功能共有四大模塊:拍照功能、照片分類功能、濾鏡功能、色彩調(diào)節(jié),圖片多點(diǎn)觸控功能。
Activity之間的跳轉(zhuǎn)如下:
CameraActivity
(照相功能)
導(dǎo)航:
該模塊的實(shí)現(xiàn)過程是:
1.加載menu 目錄下的xml文件。
2. 使用java的反射機(jī)制,實(shí)現(xiàn)隱藏菜單從ActionBar下方出現(xiàn)以及item圖標(biāo)的顯示。由于代碼的重復(fù)出現(xiàn),代碼設(shè)計(jì)成工具類。
主界面:
主界面是一個(gè)滑動(dòng)的界面,采用繼承于HorizontalScrollView改寫的控件進(jìn)行布局
界面截圖:
拍照功能:
該模塊的實(shí)現(xiàn)過程是:
通過Intent 的隱式調(diào)用,調(diào)用其他的系統(tǒng)相機(jī)應(yīng)用。
在OnActivityResult中處理圖片;
圖片瀏覽功能:
1.ZoomImageView類繼承于ImageView,實(shí)現(xiàn)了OnTouchListner等接口
2.該類包括雙擊緩慢放大,圖像平移,多指觸控等功能
3.具體表現(xiàn)為兩指或者多組放大縮小,圖片雙擊緩慢放大或者縮小,圖片平移隨手指移動(dòng)。
4 、通過OnTouch事件以及Matrix(該類實(shí)現(xiàn)圖片的縮放平移)這個(gè)類,并在縮放或平移過程中,進(jìn)行邊界檢查
5 以下為放大圖片:
濾鏡功能:
該模塊實(shí)現(xiàn)功能是:
獲取當(dāng)前圖片的像素值
2. 在Gallery中選則濾鏡功能。
其中Gallery中的圖片均經(jīng)過濾鏡處理后顯示
Gallery中可以快速滑動(dòng)來選去喜歡的濾鏡功能
點(diǎn)擊邊界上的圖片后,其后繼圖片將自動(dòng)移動(dòng)到當(dāng)前界面。
此處一共有25中濾鏡特效,每種有著不同的色調(diào)計(jì)算公式。
3. 將當(dāng)前圖片的顏色數(shù)組及顏色分量進(jìn)行相應(yīng)改變
4. 獲取改變后的圖片并顯示。
5. 如喜歡可保存在手機(jī)圖庫中。
如圖 Figure-濾鏡功能
Figure 1 濾鏡功能
色彩調(diào)節(jié)功能:
該模塊實(shí)現(xiàn)功能是:
通過三條SeekBar來改變圖片的色溫、飽和度、明度;
獲取SeekBar上長(zhǎng)度,通過相應(yīng)數(shù)學(xué)計(jì)算公式,獲得相應(yīng)的色相、飽和度、明度的數(shù)值;
通過色彩矩陣變換來處理圖像,并顯示相應(yīng)圖片。
調(diào)節(jié)喜歡的色調(diào)后,可保存在手機(jī)圖庫中。
如圖figure-色彩調(diào)節(jié):
Figure 2色彩調(diào)節(jié)
照片分類功能:
1.ListViewAdapter繼承BaseAdapter,為相冊(cè)主界面的ListView提供數(shù)據(jù)源,每一個(gè)子項(xiàng)有一個(gè)TextView和GridView分別用于顯示時(shí)間和分類好的圖片。
2.PhotoAdapter繼承ArrayAdapter,為GridView提供數(shù)據(jù)源,每個(gè)子項(xiàng)有一個(gè)ImageView,用于顯示圖片。
3.在GridView中使用AsyncTask異步加載圖片。
課程設(shè)計(jì)總結(jié)
1.本次課程設(shè)計(jì),我主要負(fù)責(zé)主界面以及圖片展示部分以及ActionBar的編寫。
通過本次課程設(shè)計(jì),我更好的掌握了Android基本控件的應(yīng)用以及Android布局的編寫。
學(xué)會(huì)合團(tuán)隊(duì)作,動(dòng)手能力得到加強(qiáng)。
對(duì)Android自定義空間有了更深刻的理解和改寫能力,閱讀源代碼的能力進(jìn)一步得到提高。
對(duì)Android各種View都有一定的了解,對(duì)View的內(nèi)部機(jī)制包括測(cè)量(onMeasure) 布局(onLayout)繪制(onDraw)有了了解
參考文獻(xiàn)
[ 1 ] 《Java開發(fā)手冊(cè)》.桂穎, 谷濤.電子工業(yè)出版社
[ 2 ] 《Android 第一行代碼》.郭霖 電子工業(yè)出版社
[ 3] 《java核心技術(shù)》.Cay S.Horstmann Gary Cornell .機(jī)械工業(yè)出版社
[ 4] Android 官網(wǎng)教程 網(wǎng)址:http://hukai.me/android-training-course-in-chinese/index.html