Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拍摄图像时预览锁定照相机2_Java_Android_Camera_Android Camera2 - Fatal编程技术网

Java 拍摄图像时预览锁定照相机2

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

我已经用camera2 Api实现了突发图像捕获,它以6 fps的速度工作良好。bt我的问题是,当它拍照时,它触发了焦点锁定,这就是为什么预览会被锁定一小段时间,我想移除预览锁定,我希望预览始终启用,这是我的静态捕获突发,我是以谷歌的camera2为例的

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-我已经有一段时间没有看到它了,它一直在进化,但我的经验是,这个项目中的许多任务都是异步完成的,因此,可能出现的竞争条件和事情发生的顺序与您预期的不同。