android - camera2 api图片是黑暗的android
问题描述
我正在尝试使用 camera2 api 从服务中拍照。我拍的照片太暗了。我尝试设置CONTROL_AE_EXPOSURE_COMPENSATION
并使用不同的相机模板,但没有帮助。任何人都可以帮助我为什么我得到黑暗的照片?这是我的代码:
private final ImageReader.OnImageAvailableListener onImageAvailableListener = (ImageReader imReader)-> {
//get image and processes
};
private void takePicture() throws CameraAccessException {
if (null == cameraDevice) {
return;
}
final CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraDevice.getId());
Size[] jpegSizes = null;
StreamConfigurationMap streamConfigurationMap = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);//setting streamConfigurationMap
if (streamConfigurationMap != null) {
jpegSizes = streamConfigurationMap.getOutputSizes(ImageFormat.JPEG);
}
final boolean jpegSizesNotEmpty = jpegSizes != null && 0 < jpegSizes.length;
int width = jpegSizesNotEmpty ? jpegSizes[0].getWidth() : 640;
int height = jpegSizesNotEmpty ? jpegSizes[0].getHeight() : 480;
final ImageReader reader = ImageReader.newInstance(width, height, ImageFormat.JPEG, 1);
final List<Surface> outputSurfaces = new ArrayList<>();
outputSurfaces.add(reader.getSurface());
final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);//setting template
captureBuilder.addTarget(reader.getSurface());
captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);//setting CONTROL_MODE
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation());//setting mobile orientation
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);//setting ae mode
captureBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_AUTO);//setting white balance
captureBuilder.set(CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE, CameraMetadata.COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY);//setting color correction
captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);//setting auto focus
captureBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_START);//setting auto focus
reader.setOnImageAvailableListener(onImageAvailableListener, null);
cameraDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession session) {
cameraCaptureSession = session;
try {//taking picture
HandlerThread handlerThread = new HandlerThread("MyHandlerThread");
handlerThread.start();
Looper looper = handlerThread.getLooper();
Handler handler = new Handler(looper);
cameraCaptureSession.capture(captureBuilder.build(), captureListener,handler);
} catch (final CameraAccessException e) {
Log.e("error capture" , e.getMessage());
}
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession session) {//
}
}
, null);
}
编辑:我的应用程序没有任何 UI,整个程序仅在后台运行。我已经用其他(三星)手机测试过它的工作,但在小米手机中使用相同的 android 版本(6.0.1)图像太暗了。我尝试添加延迟,尝试TEMPLATE_PREVIEW
并留下 50 张第一张图片对我没有任何帮助。有帮助吗?
解决方案
推荐阅读
- android - ERROR_CODE_IO_BAD_HTTP_STATUS exoplayer android
- ruby-on-rails - Rails 闪烁消息在几秒钟后消失
- jelastic - 如何为 vps http 和 https 打开 jelastic 防火墙?
- firebase - 显示用户在 Flutter 中创建的 Firestore 文档总数
- javascript - 使用 Javascript(Vue) 将当前网页下载为 HTML 文件
- excel - 如何在 Excel 宏中插入 IF 语句结果
- sql - 为多列组合所有表
- git - 有没有办法克隆存储库并自动替换最终目录中的重复文件和目录?
- json - python从循环创建json
- vue.js - Antdvue 我如何呈现自定义列内容?