rss 推薦閱讀 wap

青島信息網,青島生活網,青島新聞網!

熱門關鍵詞:  自駕游  云南  as  代理  xxx
首頁 新聞資訊 城市聚焦 理財投資 娛樂頭條 體育運動 購物消費 旅游休閑 科技創新 商業營銷 微商創業

相機開發(聚焦、橫豎屏拍照、照片存儲、連續拍照等)

發布時間:2020-07-09 13:51:33 已有: 人閱讀

  近期項目用到了相機拍照的功能,于是想著封裝好一些通用性較好的相機調用,從百度和谷歌上查找出來的資料真的印證了“天下文章一大抄”的道理,并且它們實現的拍照功能大都存在缺陷,如聚焦問題、反復拍照問題、照片存儲問題、橫豎屏轉換問題。一大堆的問題,并且程序的擴展性和可重用性實在不敢恭維,排版級其混亂。

  最后無奈,打開API文檔camera相機類,從最基礎的學起,然后自己進行改進,從這里也告訴我們一個道理,API文檔才是學習起點,由于它會告訴你整個實現的原理和原因,可以對整個框架有一個總體的了解,看完API文檔看的就有事半功倍的效果,吐槽完成,以下來正式實現。

  這幅圖是從API文檔(最好是看英文版的)整理出來的,從這副圖上面我們能夠看出,主要是有6步,當中難點是創建相機預覽類。

  通過方法getCameraInstance返回相機的實例,通過調用該方法,mContext可以獲得該相機資源,僅僅有獲得了該相機資源才可以對相機進行操作。

  我們在拍照之前須要對取景進行預覽,這里我們須要使用SurfaceView控件,關于SurfaceView控件我們先簡單的了解一下(別急,磨刀不誤砍柴工)。

  SurfaceView是View的子類,所以它擁有View的一切方法和屬性,這一點我們從命名上面就能夠看出來,比方繪制方法、大小等屬性;它比View多了一個Surface的東西,Surface是專門用來繪制的類,而SurfaceView能夠控制surface繪制的大小、位置等等;

  可能有人會問,那為什么要專門這樣一個類來繪制呢?不是有OnDraw()方法嗎?相比于OnDraw()方法它有非常多優勢,例如以下總結:

 。1)在頻繁更新UI線程的情況下,能夠使用封裝好的surface來頻繁的更新,由于surface能夠使用后臺線程對UI界面進行繪制,而OnDraw()等繪制方法非常難做到(除非你頻繁的調用handler來更新主界面,這得多麻煩。。;

 。2)SurfaceView能夠用來繪制2D或者3D圖形,繪制一些動態曲線等,它顯示的速度會比一般的快非常多,由于他是通過硬件加速的方式來繪制的。

  所以,通過以上幾點我們能夠知道,用它來接受相機的預覽是理所當然的。那么它的用法是怎么樣的呢?下創建一個surfaceView的繼承類一般須要實現例如以下幾個方法:

  在實現之前我們先來看我們的需求,我們要實現的功能:預覽、拍照、自己主動聚焦、觸摸聚焦、連續拍照、照片存儲。以下我們來創建一個SurfaceView類CameraPreview,它繼承了SurfaceView,并實現接口SurfaceHolder.Callback

  因此我們須要在surfaceCreated方法中創建一個camer實例,這個實例能夠在這個類中進行調用,實現代碼例如以下:

  當中有2個比較關鍵的方法沒有實現, setCameraParms()和reAutoFocus(),setCameraParms();函數用來設置預覽圖片的參數,當中關鍵的為預覽圖片的大小和拍照保存的尺寸大小,非常多的網上實現的程序拍出來的照片非常小模糊的原因就是沒有設置好照片的尺寸,這個照片的尺寸是依據手機本身可以支持的尺寸有非常大關系。reAutoFocus()是自己主動聚焦的方法,須要動態獲取reAutoFocus()函數是自己主動聚焦的實現;

  拍照方法有一個難點是橫豎屏拍照的轉換和存儲,網上大都實現的是默認的橫屏拍照,一旦換成豎屏后預覽就會出現故障,并且存儲的照片也有問題,因此為了解決問題,我們須要時刻方向傳感器的變化,得到當前的旋轉角度,我么能夠通過調用OrientationEventListener系統類來得到當前角度,自己定義MyOrientationDetector代碼例如以下:

  在角度范圍內自己主動調整旋轉圖片的角度,詳細旋轉的方式如代碼,從而使存儲的圖片可以正常顯示。

  在拍照時須要對圖片進行保存,可是不能影響圖片的下一次拍照,因此我們須要採用異步線程的方式,能夠使用AsyncTask類,在拍照完畢時進行調用例如以下代碼:

  注意,里面有一些類沒有詳細說明,詳細能夠查看后面的代碼下載鏈接,有什么不明確的能夠發郵件,郵件地址為

  轉載請注明出處,代碼下載地址:下載地址(別走!請留下你的評論) sorry,剛才看了一下在下載的資源的setCameraParms()方法中忘記設置尺寸大小了,自己下載完后加上,

最火資訊

首頁 | 新聞資訊 | 城市聚焦 | 理財投資 | 娛樂頭條 | 體育運動 | 購物消費 | 旅游休閑 | 科技創新 | 商業營銷 |免責聲明

Copyright2008-2020 青島信息網 www.btzwmv.tw 版權所有 業務QQ:17468920 Power by DedeCms 京ICP備13004639號

電腦版 | wap

广东快乐十分19码