android camera2API中传感器ISO和曝光时间的控制
我正在尝试添加手动相机控制新的曝光值和ISO值。我使用的是Camera2基本示例。我现在面临的问题是我对安卓系统还不熟悉。我试着看L-Camera,但它在Scala中,这让我更加困惑 我尝试了以下更改,但图像预览没有更新android camera2API中传感器ISO和曝光时间的控制,android,android-camera,android-camera2,Android,Android Camera,Android Camera2,我正在尝试添加手动相机控制新的曝光值和ISO值。我使用的是Camera2基本示例。我现在面临的问题是我对安卓系统还不熟悉。我试着看L-Camera,但它在Scala中,这让我更加困惑 我尝试了以下更改,但图像预览没有更新 private void createCameraPreviewSession() { try { SurfaceTexture texture = mTextureView.getSurfaceTexture(); assert te
private void createCameraPreviewSession() {
try {
SurfaceTexture texture = mTextureView.getSurfaceTexture();
assert texture != null;
// We configure the size of default buffer to be the size of camera preview we want.
texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
// This is the output Surface we need to start preview.
Surface surface = new Surface(texture);
// We set up a CaptureRequest.Builder with the output Surface.
mPreviewRequestBuilder
= mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mPreviewRequestBuilder.addTarget(surface);
// Here, we create a CameraCaptureSession for camera preview.
mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
// The camera is already closed
if (null == mCameraDevice) {
return;
}
// When the session is ready, we start displaying the preview.
mCaptureSession = cameraCaptureSession;
try {
// Auto focus should be continuous for camera preview.
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
CaptureRequest.CONTROL_AE_MODE_OFF);
mPreviewRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME,Long.valueOf("100000"));
mPreviewRequestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY,1600);
// Flash is automatically enabled when necessary.
setAutoFlash(mPreviewRequestBuilder);
// Finally, we start displaying the camera preview.
mPreviewRequest = mPreviewRequestBuilder.build();
mCaptureSession.setRepeatingRequest(mPreviewRequest,
mCaptureCallback, mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(
@NonNull CameraCaptureSession cameraCaptureSession) {
showToast("Failed");
}
}, null
);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
首先,您必须将模板更改为
template\u STILL\u CAPTURE
或template\u MANUAL
以查看预览中的值更改。另外,请记住将控制模式和“控制模式”设置为关闭
此控件仅在android.control.aeMode或android.control.mode设置为OFF时有效;否则,自动曝光算法将覆盖此值
从
第二,用以下方法设置您的值:
builder.set(CaptureRequest.SENSOR_SENSITIVITY, isoValue);
builder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, exposureTimeValueInMilliseconds);
最后,在所有更改之后,不要忘记使用CaptureSession.setRepeatingRequest更新预览
希望它能帮助你 因此,我对代码做了以下更改
mPreviewRequestBuilder
= mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_MANUAL);
mPreviewRequestBuilder.addTarget(surface);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_MODE,
CaptureRequest.CONTROL_MODE_OFF);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE,
CaptureRequest.CONTROL_AE_MODE_OFF);
mPreviewRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME,Long.valueOf("22000"));
mPreviewRequestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY,200);
mCaptureSession.setRepeatingRequest(mPreviewRequest,
mCaptureCallback, mBackgroundHandler);
然而,我得到了一个奇怪的预览,有很多绿灯作为输入
给你
这是使用我的内置照相机应用程序时的样子:这将解决问题:
mPreviewBuilder.set(
CaptureRequest.CONTROL_AWB_MODE,
CaptureRequest.CONTROL_AWB_MODE_AUTO
);
在使用camera 2 API手动曝光时,我也遇到了绿色捕捉的问题。
我可以通过停用控制模式
而不是控制模式
和控制模式
来修复它。
这是我的配置:
final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraCharacteristics.CONTROL_AE_MODE_OFF);
captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraCharacteristics.CONTROL_MODE_AUTO);
captureBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, Long.valueOf("8000000")); // 8000000 ns = 8 ms
设置为自动“控制AWB模式”或禁用它。不,它没有。我想这和帧速率有关。我需要设置吗?有任何地方我可以与你联系我的疑问吗?你在我的个人资料中有我的电子邮件。让我知道我是否能在那里帮助你,我会试试看。我在个人资料中找不到你的电子邮件。我应该在哪里找它!你能帮我解决同样的问题吗。。。我已经花了5天没有成功了。。我需要设置iso,但每一步我都会遇到不同的问题。。。也许,如果你有代码样本,你最终如何解决这个问题,它将帮助不仅是我。因为正如你所知道的,关于camera2api的示例很少,关于如何设置自定义设置的示例也几乎没有……这只是一个让我感到困扰的要点。曝光时间不是以毫秒为单位,而是以纳秒为单位。