• android Camera 如何判断当前使用的摄像头是前置还是后置


    现在 android 平台的智能手机一般都标配有两颗摄像头。在 Camera 中都存在摄像头切换的功能。

    并且有一些功能前后置摄像头上会有所不同。譬如人脸检测,人脸识别,自动对焦,闪光灯等功能,

    如果前置摄像头的像素太低,不支持该功能的话,就需要在前置摄像头上关掉该 feature.

    那么是如何判断并切换前后置摄像头的呢?

    我们先来看下 CameraInfo 这个类,

     1 /** 
     2  * Information about a camera 
     3  */  
     4 public static class CameraInfo {  
     5     /** 
     6      * The facing of the camera is opposite to that of the screen. 
     7      */  
     8     public static final int CAMERA_FACING_BACK = 0;  
     9   
    10     /** 
    11      * The facing of the camera is the same as that of the screen. 
    12      */  
    13     public static final int CAMERA_FACING_FRONT = 1;  
    14   
    15     /** 
    16      * The direction that the camera faces. It should be 
    17      * CAMERA_FACING_BACK or CAMERA_FACING_FRONT. 
    18      */  
    19     public int facing;  
    20   
    21     /** 
    22      * <p>The orientation of the camera image. The value is the angle that the 
    23      * camera image needs to be rotated clockwise so it shows correctly on 
    24      * the display in its natural orientation. It should be 0, 90, 180, or 270.</p> 
    25      * 
    26      * <p>For example, suppose a device has a naturally tall screen. The 
    27      * back-facing camera sensor is mounted in landscape. You are looking at 
    28      * the screen. If the top side of the camera sensor is aligned with the 
    29      * right edge of the screen in natural orientation, the value should be 
    30      * 90. If the top side of a front-facing camera sensor is aligned with 
    31      * the right of the screen, the value should be 270.</p> 
    32      * 
    33      * @see #setDisplayOrientation(int) 
    34      * @see Parameters#setRotation(int) 
    35      * @see Parameters#setPreviewSize(int, int) 
    36      * @see Parameters#setPictureSize(int, int) 
    37      * @see Parameters#setJpegThumbnailSize(int, int) 
    38      */  
    39     public int orientation;  
    40 };  

    见名知义,它就是一个 Camera 信息类。它是通过与屏幕的方向是否一致来定义前后置摄像头的。

    与屏幕方向相反即为 BACK_FACING_CAMERA

    与屏幕方向一致即为 FRONT_FACING_CAMERA

    那么在代码中我们是如何获取当前使用的 CamerInfo 呢

    1 Camera.CameraInfo info = new Camera.CameraInfo();  
    2 Camera.getCameraInfo(cameraId, info); 

    当然,使用该代码的前提是要 import android.hardware.Camera.CameraInfo;

    判断使用是前置还是后置摄像头,可以通过if (info.facing == CameraInfo.CAMERA_FACING_FRONT) 来判断。

    当Camera 的实例已经创建了的情况下,则需要通过如下方式来判断。

    1 CameraInfo info = CameraHolder.instance().getCameraInfo()[mCameraId];  
    2 if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {  
    3     //stopFaceDetection();  
    4 }  

    也可以通过 if(mCameraId == CameraInfo.CAMERA_FACING_FRONT) 来判断。

    其中 mCameraId 是当前使用的 CameraId, 一般前置为1, 后置为 0。

  • 相关阅读:
    hbase
    spark-streaming
    spark-Scala
    经典台词二
    星爷电影经典台词一
    Hadoop第一阶段总结
    测试2
    POI 表格数据导出
    GC垃圾回收机制
    Java常见的200道面试题
  • 原文地址:https://www.cnblogs.com/zl1991/p/5203312.html
Copyright © 2020-2023  润新知