Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Multimedia框架總結(十五)Camera框架之Camera2補充

Android Multimedia框架總結(十五)Camera框架之Camera2補充

編輯:關於Android編程

前言:監於5.0之後Google用的是Camera2相關API取代之前的Camera,過時的Camera雖然精典,但不再進行介紹,可自行查閱相關資料。今天本文是在正式深入代碼前對Camera2的一個補充。上篇中,最後用兩種方式各自定義了一個相機的Sample。

Camera2下各個Class介紹 Camera2整體運作圖 Camera2類圖(局部) Camera2中3個重要的Callback setRepeatingRequest和capture

5.0後用了全新的設計的Camera2下的API, 這些API不僅提供了Android系統的拍照功能,還能支持RAW照片輸出,甚至允許程序調整相機的對焦模式,曝光模式,快門等。

Camera2下各個Class介紹

接下來接介紹Camera2下的各個類:

CmaeraManager: 攝像頭管理者,這是一個全新的系統管理者,專門用戶檢測系統攝像頭,打開系統攝像頭,除此之外,調用CameraManager的getCameraCharacteristics(String)方法即可獲取指定攝像頭的相關特性。 CameraCharacteristics:攝像頭特性。該對象通過CameraManager來獲取,用於描述特定攝像頭所支持的各種特性。 CameraDevice:代表系統攝像頭。該類的功能類似於早期的Camera類。 CameraCaptureSession:這是一個與攝像頭建立會話的類,當程序需要預覽、拍照時,都需要先通過該類的實例創建Session。而且不管預覽還是拍照,也都是由該對象的方法進行控制的,其中控制預覽的方法為setRepeatingRequest();控制拍照的方法為capture()。
為了監聽CameraCaptureSession的創建過程,以及監聽CameraCaptureSession的拍照過程,Camera2 API為CameraCaptureSession提供了StateCallback、CaptureCallback等內部類。 CameraRequest和CameraRequest.Builder:當程序調用setRepeatingRequest()方法進行預覽時,或調用capture()方法進行拍照時,都需要傳入CameraRequest參數。CameraRequest代表了一次捕獲請求,用於描述捕獲圖片的各種參數設置,比如對焦模式、曝光模式……程序需要對照片所做的各種控制,都通過CameraRequest參數進行設置。可以理解一個請求參數一樣,CameraRequest.Builder則負責生成CameraRequest對象。

Camera2整體運作圖

 


這裡寫圖片描述

- Google采用了pipeline(管道)的概念,將Camera Device相機設備和Android Device安卓設備連接起來
- Android Device通過管道發送CaptureRequest拍照請求給Camera Device
- Camera Device通過管道返回CameraMetadata數據給Android Device
- 最後這一切建立在一個叫作CameraCaptureSession的會話中。

 

Camera2類圖(局部)這裡寫圖片描述


其中CameraManager是所有相機設備(CameraDevice)的管理者,而每個CameraDevice自己會負責建立CameraCaptureSession以及建立CaptureRequest。CameraCharacteristics是CameraDevice的屬性描述類,在CameraCharacteristics中可以進行相機設備功能的詳細設定。

 

Camera2中3個重要的Callback

類圖中有著三個重要的callback,其中CameraCaptureSession.CaptureCallback將處理預覽和拍照圖片的工作,需要重點對待。


這裡寫圖片描述

以上流程總結為:

 

調用openCamera方法後會回調CameraDevice.StateCallback這個方法,在該方法裡重寫onOpened函數。在onOpened方法中調用createCaptureSession,該方法又回調CameraCaptureSession.StateCallback方法。 在CameraCaptureSession.StateCallback中重寫onConfigured方法,設置setRepeatingRequest方法(也就是開啟預覽了)。
setRepeatingRequest又會回調
CameraCaptureSession.CaptureCallback方法。 重寫CameraCaptureSession.CaptureCallback中的
onCaptureCompleted方法,result就是未經過處理的元數據了。 其中onCaptureProgressed方法是在Capture過程中的,像這類Progress,也就是在onCaptureCompleted之前,所以,在這之前相對圖像干什麼就看你的了,像美顏,美拍等操作就可以在這個方法中實現。

以上重點是3個Callback函數的回調

setRepeatingRequest和capture

接下來了解下:setRepeatingRequest和capture方法其實都是向相機設備發送獲取圖像的請求,但是capture就獲取那麼一次,而setRepeatingRequest就是不停的獲取圖像數據,所以呢,使用capture就想拍照一樣,圖像就停在那裡,但是setRepeatingRequest一直在發送和獲取,所以需要連拍的時候就調用它,然後在onCaptureCompleted中保存圖像就行了。(注意了,圖像的預覽也是用的setRepeatingRequest,只是你不處理數據就行)

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved