Android 相机 Api 2 手动触摸对焦
Android Camera Api 2 Manual focus with touch
我想制作带触摸对焦的相机应用程序,但我对相机有点困惑api 2.我读过LENS_FOCUS_DISTANCE
但我不明白如何使用它.你能帮忙吗?
提前致谢,祝周末愉快!
Camera API2 开始时看起来很奇怪,但随后您会发现它非常简单。
此问题的最佳答案是带注释的代码:
private void captureImage() {
try {
//for do this you should have mCameraDevice and mCameraCaptureSession
//get CaptureRequestBuilder.
captureStillBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
//add target surfaces - for getting image data you should have instance on ImageReader
//with OnImageAvailableListener that will be called when image will be captured
//but for showing on screen you have to use SurfaceView or TextureView
captureStillBuilder.addTarget(mImageReader.getSurface());
//add some details for Request
//in general: you have fields and values for it and you just set what value should be in each field
// auto focus works only when whole control mode in auto
captureStillBuilder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
// before capture lock focus
captureStillBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,
CaptureRequest.CONTROL_AF_TRIGGER_START);
// set area for focusing
MeteringRectangle[] focusArea = new MeteringRectangle[1];
focusArea[0] = new MeteringRectangle(/*here set coordinates for focus on */);
captureStillBuilder.set(CaptureRequest.CONTROL_AF_REGIONS, focusArea);
// create callback for this capture
CameraCaptureSession.CaptureCallback callback = new ...
// just run capture to make focused photo
mCameraCaptureSession.capture(captureStillBuilder.build(), callback, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
我想制作带触摸对焦的相机应用程序,但我对相机有点困惑api 2.我读过LENS_FOCUS_DISTANCE
但我不明白如何使用它.你能帮忙吗?
提前致谢,祝周末愉快!
Camera API2 开始时看起来很奇怪,但随后您会发现它非常简单。
此问题的最佳答案是带注释的代码:
private void captureImage() {
try {
//for do this you should have mCameraDevice and mCameraCaptureSession
//get CaptureRequestBuilder.
captureStillBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
//add target surfaces - for getting image data you should have instance on ImageReader
//with OnImageAvailableListener that will be called when image will be captured
//but for showing on screen you have to use SurfaceView or TextureView
captureStillBuilder.addTarget(mImageReader.getSurface());
//add some details for Request
//in general: you have fields and values for it and you just set what value should be in each field
// auto focus works only when whole control mode in auto
captureStillBuilder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
// before capture lock focus
captureStillBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,
CaptureRequest.CONTROL_AF_TRIGGER_START);
// set area for focusing
MeteringRectangle[] focusArea = new MeteringRectangle[1];
focusArea[0] = new MeteringRectangle(/*here set coordinates for focus on */);
captureStillBuilder.set(CaptureRequest.CONTROL_AF_REGIONS, focusArea);
// create callback for this capture
CameraCaptureSession.CaptureCallback callback = new ...
// just run capture to make focused photo
mCameraCaptureSession.capture(captureStillBuilder.build(), callback, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}