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是什么?如何设置每毫秒帧数?这是迄今为止唯一对我有效的解决方案。但是我得到的预览看起来像是夜间模式