Java 拍摄图像时预览锁定照相机2
我已经用camera2 Api实现了突发图像捕获,它以6 fps的速度工作良好。bt我的问题是,当它拍照时,它触发了焦点锁定,这就是为什么预览会被锁定一小段时间,我想移除预览锁定,我希望预览始终启用,这是我的静态捕获突发,我是以谷歌的camera2为例的Java 拍摄图像时预览锁定照相机2,java,android,camera,android-camera2,Java,Android,Camera,Android Camera2,我已经用camera2 Api实现了突发图像捕获,它以6 fps的速度工作良好。bt我的问题是,当它拍照时,它触发了焦点锁定,这就是为什么预览会被锁定一小段时间,我想移除预览锁定,我希望预览始终启用,这是我的静态捕获突发,我是以谷歌的camera2为例的 private void captuteStillImage() { try { count = 0; CaptureRequest.Builder captureBuilder = mCameraDev
private void captuteStillImage() {
try {
count = 0;
CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
int rotation = getWindowManager().getDefaultDisplay().getRotation();
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, ORIENTATIONS.get(rotation));
CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
super.onCaptureCompleted(session, request, result);
//unlockFocus();
count++;
Log.e("count",count+"");
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_count.setText(count+"");
}
});
if (count >= MAX_CAPTURE) {
unlockFocus();
}
Log.e("Image Capture", "Successfully");
}
};
// mCameraCaptureSession.capture(captureBuilder.build(), captureCallback, null);
List<CaptureRequest> captureList = new ArrayList<CaptureRequest>();
captureBuilder.addTarget(mImageReader.getSurface());
for (int i = 0; i < MAX_CAPTURE; i++) {
captureList.add(captureBuilder.build());
}
//mCameraCaptureSession.stopRepeating();
mCameraCaptureSession.captureBurst(captureList, captureCallback, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
我在camera2basic上对此进行了一些实验,发现如果在获取图像后和保存图像之前调用unlock,我可以更快地恢复预览-我还删除了captureCallback中对unLockFocus的原始调用 /** *这是{@link ImageReader}的回调对象。当 *静止图像已准备好保存。 */ private final ImageReader.OnImageAvailableListener监控mageAvailableListener =新建ImageReader.OnImageAvailableListener{ @凌驾 ImageAvailableImageReader读取器上的公共无效{ Log.dTAG,可用; //获取图像 Image cameraImage=reader.acquireNextImage; //现在解锁焦点,这样UI看起来就不会被锁定-注意,这比 //原始Camera2谷歌的基本示例,因为原始位置导致预览在任何时间锁定 //图像处理和保存。 解除锁定焦点; //将图像文件保存在后台-注意检查您是否拥有用户授予的权限,否则将导致异常。 mBackgroundHandler.postnew ImageSaveTargetActivity.getApplicationContext、cameraImage、outputPicFile; } }; 然而,Camera2Basic有许多回调,我发现当您开始测试暂停并恢复活动或片段的场景时,尤其是如果您的应用程序也有其他异步回调,很容易进入竞争条件,从而导致意外行为或崩溃 如果您只是想要一个简单的相机示例,在拍照时可以更快地返回预览,那么基本的FotoApparat示例也值得一看:
我无法保存从读卡器获取的图像文件,因为它将在捕获新图像时关闭..我正在捕获6个图像突发,所以,我有。尝试过了,我试图将图像保存在一个数组中,然后当捕获完成后,尝试逐个保存,但由于图像已关闭,所以崩溃@Mick@mick在Camera2Basic unlockFocus中,captureCallback在captureStillPicture内调用。。你是说在captureCallback之前会调用imageAvailableListener吗?@Siva-我已经有一段时间没有看到它了,它一直在进化,但我的经验是,这个项目中的许多任务都是异步完成的,因此,可能出现的竞争条件和事情发生的顺序与您预期的不同。