相机预览在低光android中太暗

Lik*_* Ts 5 android preview android-camera

我的相机应用程序预览在低光照下太暗.如果我打开我的谷歌相机,它将增加预览内的亮度,以便我们的脸部可以拍照.但我的预览完全是黑暗的.我处理了亮度和光线传感器.我的Lightsensor工作时很轻.我需要让预览可见.让我知道我该怎么办?

 public void initialBrightness() {
        try {
            brightnessMode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }
        if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
            Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE,
                    Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
            brightnessModeAuto = true;
        }
        Settings.System.putInt(this.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 95);
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = 100;
        getWindow().setAttributes(lp);

    } 
Run Code Online (Sandbox Code Playgroud)

我在调用相机预览类之前在onCreate方法中调用此方法.

Tiz*_*ato 7

要解决此问题,您必须解锁autoExposureCompensation并设置为MAX值:

Camera.Parameters params = mCamera.getParameters();

params.setExposureCompensation(params.getMaxExposureCompensation());

if(params.isAutoExposureLockSupported()) {
 params.setAutoExposureLock(false);
}

mCamera.setParameters(params);
Run Code Online (Sandbox Code Playgroud)

根据Android Develop> Reference> Camera.Parameters

使用setWhiteBalance(String)更改白平衡模式将释放自动白平衡锁定(如果已设置).

例如,曝光补偿,AE锁定和AWB锁定可用于捕获曝光包围的图像突发.调用相机释放()后,将不会保持自动白平衡状态(包括锁定状态).

在打开()之后但在第一次调用startPreview()之前锁定自动白平衡将不允许自动白平衡例程运行,并且可能导致捕获图像中的颜色严重错误.

所以在第一次调用startPreview()之后要小心并使用上面提到的代码

  • 如果它在camera2中,我们该怎么办? (2认同)

vik*_*koo 7

请尝试以下代码.它对我有用.

   previewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, getRange());//This line of code is used for adjusting the fps range and fixing the dark preview
   previewRequestBuilder.set(CaptureRequest.CONTROL_AE_LOCK, false);
   previewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START);
Run Code Online (Sandbox Code Playgroud)

getRange()函数如下:

private Range<Integer> getRange() {
    CameraManager mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
    CameraCharacteristics chars = null;
    try {
        chars = mCameraManager.getCameraCharacteristics(cameraId);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
    Range<Integer>[] ranges = chars.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);

    Range<Integer> result = null;

    for (Range<Integer> range : ranges) {
        int upper = range.getUpper();

        // 10 - min range upper for my needs
        if (upper >= 10) {
            if (result == null || upper < result.getUpper().intValue()) {
                result = range;
            }
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

经过数小时的不同设置测试后,对我有用的是减少每秒帧数。

通过这样做,我猜自动曝光校正有足够的时间来计算可用光的最佳设置。

因此,从 30 fps 降低到 10 fps 就成功了。

mCameraSource = new CameraSource.Builder(context, detector)
            .setRequestedPreviewSize(640, 480)
            .setFacing(CameraSource.CAMERA_FACING_FRONT)
            .setRequestedFps(10.0f)
            .build();
Run Code Online (Sandbox Code Playgroud)


Kin*_*ses 0

根据我的实验,场景模式设置可以更改预览(与 ISO 或曝光补偿不同,它们都适用于拍摄的图片)。不要使用自动。尝试 scene-mode-values=night 或 scene-mode=dusk-dawn。

场景的问题在于支持的值在不同设备上没有标准化。但通常会出现某种夜晚。

  • 我通过为相机提供可变的 fps 解决了这个问题。首先调用Camera.getParameter.getSupportedPreviewFpsRange(); 就我而言,我得到(15000到15000)、(24000到24000)、(30000到30000)和(15000,30000)。我尝试将范围设置为 15000 到 30000。确保您传递到不同的号码。 (2认同)