Android 開發 Camera類的拍照與錄像
阿新 • • 發佈:2018-10-29
har con 無法 函數 個數 管理 enable .html back
前言
在開發Android應用的時候,如果需要調用攝像頭拍照或者錄像,除了通過Intent調用系統現有相機應用進行拍照錄像之外,還可以通過直接調用Camera硬件去去獲取攝像頭進行拍照錄像的操作。本篇博客將講解如何在Android應用中通過Camera拍照錄像。
參考博客:https://www.cnblogs.com/plokmju/p/android_Camera.html
Camera api 說明
Camera是Android攝像頭硬件的相機類,位於硬件包"android.hardware.Camera"下。它主要用於攝像頭捕獲圖片、啟動/停止預覽圖片、拍照、獲取視頻幀等,它是設備本地的服務,負責管理設備上的攝像頭硬件。
Camera既然用於管理設備上的攝像頭硬件,那麽它也為開發人員提供了相應的方法,並且這些方法大部分都是native的,用C++在底層實現,下面簡單介紹一下Camera的一些方法:
api | 說明 |
open() | 打開Camera,返回一個Camera實例。 |
open(int cameraId) | 根據cameraId打開一個Camera,返回一個Camera實例。 |
release() | 釋放掉Camera的資源。 |
getNumberOfCameras() | 獲取當前設備支持的Camera硬件個數。 |
getParameters() | 獲取Camera的各項參數設置類。 |
setParameters(Camera.Parameters params) |
通過params把Camera的各項參數寫入到Camera中。 |
setDisplayOrientation(int degrees) | 攝像預覽的旋轉度。 |
setPreviewDisplay(SurfaceHolder holder) | 設置Camera預覽的SurfaceHolder。 |
starPreview() | 開始Camera的預覽。 |
stopPreview() | 停止Camera的預覽 |
setPreviewCallback() | 設置預覽回調 |
reconnect() | 重新連接 |
autoFocus(Camera.AutoFocusCallback cb) | 自動對焦 |
cancelAutoFocus() | 取消啟動對焦 |
setAutoFocusMoveCallback() | 自動對焦移動回調 |
takePicture(Camera.ShutterCallback shutter,Camera.PictureCallback raw,Camera.PictureCallback jpeg) | 拍照。 |
enableShutterSound() | 啟用快門聲音 |
lock() | 鎖定Camera硬件,使其他應用無法訪問。 |
unlock() | 解鎖Camera硬件,使其他應用可以訪問。 |
startFaceDetection() | 啟動人臉識別 |
stopFaceDetection() | 停止人臉識別 |
setFaceDetectionListener() | 人臉識別監聽回調 |
setPreviewCallback() | 設置預覽回調 |
setPreviewCallbackWithBuffer() | 設置預覽緩沖回調 |
setOneShotPreviewCallback() | 設置一個鏡頭預覽回調 |
setErrorCallback() | 設置異常回調 |
startSmoothZoom() | 啟動平滑縮放 |
stopSmoothZoom() | 停止平滑縮放 |
setZoomChangeListener() | 縮放監聽 |
setPreviewTexture() | 設置預覽紋理 |
上面已經介紹了Camera的常用方法,下面根據這些方法詳細講解Android下使用Camera開發拍照應用最基本的過程:
- 使用open()方法獲取一個Camera對象,鑒於Android設備可能配置了多個攝像頭,open()方法可以通過攝像頭Id開啟指定的攝像頭。
- 為Camera對象設置預覽類,它是一個SurfaceHolder對象,通過setPreviewDisplay(SurfaceHolder)方法設置。
- 調用startPreview()方法開始Camera對象的預覽。
- 調用takePicture()方法進行拍照,其中可以通過Camera.PictureCallback()回調獲得拍攝的Image數據。
- 當拍攝完成後,需要調用stopPreview()方法停止預覽,並使用release()釋放Camera占用的資源。
以上介紹的步驟都是最基本的過程,是必不可少的。Camera沒有提供公開的構造函數,只能通過open()方法獲取,並且必須設置一個預覽類SurfaceHolder,如果不設置的話,將無法使用Camera。在使用完成Camera之後,必須使用release()釋放Camera資源。
Parameters api 說明:
Android 開發 Camera類的拍照與錄像