簡體   English   中英

Android Camera2前置攝像頭

[英]Android Camera2 front camera

我最近注意到相機 API 已被棄用,我發現了名為 Camera2 的新 API。

我已經閱讀了文檔,但我並不真正理解它。

所以我的問題是:如何使用新的攝像頭 api 預覽前置攝像頭?

只是預覽,不記錄。

我想使用這個新 API,因為將來我猜當前的 Camera API 將被替換並停止工作。

所以我想做好准備,在每個人都恐慌的時候坐下來觀看。 XD

首先,找出你的前置攝像頭的id(當然如果有的話)

    CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
            try {
                return manager.getCameraIdList();
            } catch (CameraAccessException e) {
                return null;
            }

然后像這樣找到faceCamera:

CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(cameraId);

        if (cameraCharacteristics == null)
            throw new NullPointerException("No camera with id " + cameraId);

        return cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT;

最后,您必須使用該 ID 設置相機:

CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
   try {
       characteristics = manager.getCameraCharacteristics(mCameraId);
   }  catch (CameraAccessException e) {
       e.printStackTrace();
   } 

請注意,這些只是關於如何做你想做的事情的提示。 有關如何開始預覽等的詳細信息,請參閱: http : //developer.android.com/samples/Camera2Basic/index.html

0 代表后部 1 代表前部

對於后置攝像頭,我們必須在openCamera方法中執行此操作

cameraId = manager.getCameraIdList()[0];

對於面向前置攝像頭,我們必須在openCamera方法中添加以下行:

cameraId = manager.getCameraIdList()[1];

在這里添加了所有代碼和屏幕截圖

在此處輸入圖片說明

我們可以獲取設備中攝像頭的特性

   private void getCameraCharacteristics (){
       try {
       CameraManager manager=(CameraManager)getSystemService(Context.CAMERA_SERVICE);
           for(String id : manager.getCameraIdList()){
               Log.e(TAG, "Camara: Id " + id );
               CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(id);
               List<CameraCharacteristics.Key<?>> listaCaracteristicas = cameraCharacteristics.getKeys();
               for(CameraCharacteristics.Key<?> caracteristica : listaCaracteristicas){
                   Log.i(TAG,  "caracteristic: " + caracteristica.getName()  + " : " + cameraCharacteristics.get(caracteristica));
               }
               Log.i(TAG, listaCaracteristicas.toString());
           }
       } catch (CameraAccessException e) {
           e.printStackTrace();
       }

   }

這個特性之一是android.lens.facing ,所以基於這個值我們可以得到前置攝像頭:

 if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT){
              //Frontal camera
  }

這是獲取此值的方法:

private String getIdFrontalCamera () {
    try {
        CameraManager manager=(CameraManager)getSystemService(Context.CAMERA_SERVICE);
        for(String id : manager.getCameraIdList()){
            CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(id);
            //Seek frontal camera.
            if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT){
                Log.i(TAG, "Camara frontal id " + id);
                return id;
            }
        }
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
    return "0";
}

大多數時候前置攝像頭的id是1。

我使用 Google Camera2 API 示例中的代碼進行了一些更改,以使前后攝像頭正常工作,包括在本地保存圖像和使用疊加層更改 TextureView 的形狀。

我也使用 exif 界面處理圖像旋轉。

有很多代碼,所以我將發布一個指向我的 GitHub 存儲庫的鏈接:

https://github.com/craigspicer/Camera2API

https://nullparams.com/camera-2-api-tutorial/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM