1. 程式人生 > >Android 開發 Camera類的拍照與錄像

Android 開發 Camera類的拍照與錄像

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開發拍照應用最基本的過程:

  1. 使用open()方法獲取一個Camera對象,鑒於Android設備可能配置了多個攝像頭,open()方法可以通過攝像頭Id開啟指定的攝像頭。
  2. 為Camera對象設置預覽類,它是一個SurfaceHolder對象,通過setPreviewDisplay(SurfaceHolder)方法設置。
  3. 調用startPreview()方法開始Camera對象的預覽。
  4. 調用takePicture()方法進行拍照,其中可以通過Camera.PictureCallback()回調獲得拍攝的Image數據。
  5. 當拍攝完成後,需要調用stopPreview()方法停止預覽,並使用release()釋放Camera占用的資源。

  以上介紹的步驟都是最基本的過程,是必不可少的。Camera沒有提供公開的構造函數,只能通過open()方法獲取,並且必須設置一個預覽類SurfaceHolder,如果不設置的話,將無法使用Camera。在使用完成Camera之後,必須使用release()釋放Camera資源。

Parameters api 說明:

    

Android 開發 Camera類的拍照與錄像