Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在微光下,相机预览太暗_Android_Android Camera_Preview - Fatal编程技术网

Android 在微光下,相机预览太暗

Android 在微光下,相机预览太暗,android,android-camera,preview,Android,Android Camera,Preview,我的相机应用程序预览在弱光下太暗。如果我打开我的谷歌相机,它会增加预览中的亮度,这样我们的脸就可以看到拍照了。但我的预览完全是黑暗的。我已经处理了亮度和光照传感器。我的光传感器在有光线时工作。我需要使预览可见。我该怎么办 public void initialBrightness() { try { brightnessMode = Settings.System.getInt(getContentResolver(), Settings.System.

我的相机应用程序预览在弱光下太暗。如果我打开我的谷歌相机,它会增加预览中的亮度,这样我们的脸就可以看到拍照了。但我的预览完全是黑暗的。我已经处理了亮度和光照传感器。我的光传感器在有光线时工作。我需要使预览可见。我该怎么办

 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);

    } 

在调用camera preview类之前,我在onCreate方法中调用此方法

根据我的实验,场景模式设置可以改变预览(不同于ISO或曝光补偿,两者都适用于拍摄的图片)。不要使用自动档。尝试场景模式值=夜间或场景模式=黄昏-黎明


场景的问题在于,支持的值没有跨设备标准化。但是通常会出现某种类型的夜间。

要解决此问题,您必须解锁自动曝光补偿,并设置为最大值

Camera.Parameters params = mCamera.getParameters();
 
params.setExposureCompensation(params.getMaxExposureCompensation());
 
if(params.isAutoExposureLockSupported()) {
 params.setAutoExposureLock(false);
}

mCamera.setParameters(params);

使用setWhiteBalance(字符串)更改白平衡模式将释放自动白平衡锁(如果已设置)

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

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


因此,请务必小心,在第一次调用startPreview()后使用上述代码,阅读Android Camera app的开源代码如下:

它通过以下方式初始化相机:

// Reset preview frame rate to the maximum because it may be lowered by
// video camera application.
 List<Integer> frameRates = parameters.getSupportedPreviewFrameRates();
        if (frameRates != null) {
            Integer max = Collections.max(frameRates);
            parameters.setPreviewFrameRate(max);
        }
//将预览帧速率重置为最大值,因为它可能会降低
//摄像机应用。
列表帧率=参数。getSupportedPreviewFrameRates();
如果(帧率!=null){
整数max=Collections.max(帧率);
参数。setPreviewFrameRate(最大值);
}

它在安卓Nexus5,棒棒糖中运行良好。

经过数小时不同设置的测试后,我的工作原理是减少每秒帧数

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

所以,从每秒30帧减少到每秒10帧就可以了

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

请尝试下面的代码。这对我有用

   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);
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;
}
private Range getRange(){
CameraManager=(CameraManager)getSystemService(Context.CAMERA\u SERVICE);
CameraCharacteristics chars=null;
试一试{
chars=mCameraManager.getCameraCharacteristics(cameraId);
}捕获(CameraAccessE异常){
e、 printStackTrace();
}
Range[]ranges=chars.get(相机特性控制、自动曝光、可用、目标、FPS、范围);
范围结果=空;
用于(范围:范围){
int upper=range.getUpper();
//10分钟射程上限,满足我的需求
如果(上限>=10){
if(result==null | | upper
请看这里:在我的问题中,我已经清除了提到的我正在处理亮度。我可以增加亮度。但是有一些不同的东西使预览变暗。请再看一次这个问题。@likitts请发布您的代码,显示您如何设置亮度。我已尝试将亮度增加到最大值255。但这只会增加屏幕亮度。我也用过光传感器。我的预览将在弱光下完全变暗。光线传感器在那个时候不会增加预览亮度。请帮助我。我不认为这与亮度有关,因为我已经增加了亮度并检查过了。我不知道为什么这些人会投反对票。我已经在晚上实施了场景模式。我在开始预览时已经实现了。如果我错了,请用一些示例代码纠正我。我通过给相机提供可变fps解决了这个问题。首先调用Camera.getParameter.getSupportedPreviewFpsRange();在我的例子中,我得到了(15000到15000),(24000到24000),(30000到30000)和(1500030000)。我试着将范围设置为15000到30000。确保你正在传递到不同的号码。如果是在camera2中,我们怎么做?如果你找到一个我感兴趣的答案@ShylendraMadda!我在CameraX new Library上遇到了完全相同的问题。这里的.serRequestedFps是什么?如何设置每毫秒帧数?这是迄今为止唯一对我有效的解决方案。但是我得到的预览看起来像是夜间模式