如何为自定义相机设置曝光和白平衡值

vam*_*olu 12 camera android android-camera

如果我在Android自定义相机中初始化相机参数时没有设置曝光和白平衡会发生什么情况.相机是自己处理这些还是我需要在相机初始化时指定值?

我过去遇到了闪光灯问题,将曝光和白平衡设置为特定值可以帮助我克服这些问题.我没有任何计划让用户手动修改曝光和/或白平衡设置.

我有以下代码设置:

if(isSupported(Camera.Parameters.SCENE_MODE_AUTO, mParameters.getSupportedSceneModes()))
    {
        mSceneMode=Camera.Parameters.SCENE_MODE_AUTO;
        mParameters.setSceneMode(mSceneMode);
    }

    int min=mParameters.getMinExposureCompensation();
    int max=mParameters.getMaxExposureCompensation();
    float step=mParameters.getExposureCompensationStep();
    //do i need to setExposureCompensation here??
    if(mSceneMode==Camera.Parameters.SCENE_MODE_AUTO && isSupported(Camera.Parameters.FLASH_MODE_AUTO,mParameters.getSupportedFlashModes()))
    {
            //ususally when I let the flash fire,the image is filled with light
            //all that does is make everything else undecipherable...  
        mFlashMode=Camera.Parameters.FLASH_MODE_AUTO;
        mParameters.setFlashMode(mFlashMode);
    }

        if(isSupported(Camera.Parameters.WHITE_BALANCE_AUTO,mParameters.getSupportedWhiteBalance()))
    {
        mWhiteBalanceMode=Camera.Parameters.WHITE_BALANCE_AUTO;
        mParameters.setWhiteBalance(mWhiteBalanceMode);
    }
Run Code Online (Sandbox Code Playgroud)

我已经读过当应用autoExposureLock和autoWhiteBalanceLock时停止自动曝光和自动白平衡更新周期.为什么以及如何在我的相机代码中使用这些锁?

小智 6

根据我自己的开发,曝光和白平衡默认设置为"自动":自动曝光"和"自动白平衡".

您可以使用以下方法检查支持的模式

mCameraParameters = mCamera.getParameters();
Log.i(TAG, "Supported Exposure Modes:" + mCameraParameters.get("exposure-mode-values"));    
Log.i(TAG, "Supported White Balance Modes:" + mCameraParameters.get("whitebalance-values"));
Run Code Online (Sandbox Code Playgroud)

并检查当前模式:

Log.i(TAG, "Exposure setting = " + mCameraParameters.get("exposure")); 
Log.i(TAG, "White Balance setting = " + mCameraParameters.get("whitebalance")); 
Run Code Online (Sandbox Code Playgroud)

如果你想使用另一种模式你可以像这样设置:

mCameraParameters.set("exposure", "night");
mCamera.setParameters(mCameraParameters);
Run Code Online (Sandbox Code Playgroud)

  • 除了常量或方法之外,不要使用任何东西:`camera_parameters.getWhiteBalance()` (3认同)
  • @JoelTeply祝你好运设置ISO或其他几种参数.为方便起见,只有可设置相机参数的子集在`Camera.Parameters` API中具有getter/setter方法.这正是提供通用`get()`和`set()`方法的原因.只要从支持的值列表中选择设置,上述方法就可以了.我不明白为什么杰克的回答被低估了. (3认同)