【问题标题】:ImageReader Android can't read any imageImageReader Android 无法读取任何图像
【发布时间】:2015-08-31 10:22:39
【问题描述】:

我正在尝试在我的应用程序上实现 ImageReader,但我不知道为什么,他什么也没读。

List<Surface> surfaces = new ArrayList<Surface>();

        Surface previewSurface = new Surface(texture);
        previewRequestBuilder.addTarget(previewSurface);
        recordRequestBuilder.addTarget(previewSurface);
        surfaces.add(previewSurface);

        Surface recorderSurface = mediaRecorder.getSurface();
        surfaces.add(recorderSurface);

        ImageReader mImageReader = ImageReader.newInstance(previewSize.getWidth(),previewSize.getHeight(), ImageFormat.JPEG,5);
        Surface processSurface = mImageReader.getSurface();
        surfaces.add(processSurface);
        mImageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
            @Override
            public void onImageAvailable(ImageReader reader) {
                Log.v("ImageReader ","An Image");
            }
        },null);

        cameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {

            @Override
            public void onConfigured(CameraCaptureSession cameraCaptureSession) {
                captureSession = cameraCaptureSession;
                updateRequest(PREVIEW_REQUEST);
            }

            @Override
            public void onConfigureFailed(CameraCaptureSession cameraCaptureSession) {
                Activity activity = getActivity();
                if (null != activity) {
                    Toast.makeText(activity, "Failed", Toast.LENGTH_SHORT).show();
                }
            }
        }, null);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

所以我得到了 3 个 Surface:previewSurface 用于显示,recordSurface 用于录制视频,processSurface 用于获取图像(使用 ImageReader)并进行处理。 但我什至没有看到我的 Log.v 一次!

提前感谢您的回答。

【问题讨论】:

    标签: android image reader


    【解决方案1】:

    您的代码可能无法正常工作的原因至少有 2 个:

    1. OnImageAvailableListener 的实现中,在onImageAvailable(ImageReader reader) 方法中,您不会读取并关闭图像。根据我的经验,如果您不从阅读器读取/关闭图像,相机就会冻结。如果是这种情况,那么您应该至少看到一次(甚至更多次)日志消息。我建议您在方法中添加读取和关闭图像:
    @覆盖 公共无效 onImageAvailable(ImageReader 阅读器){ Log.v("ImageReader","一幅图像"); 图片 img = reader.acquireNextImage(); img.close(); }
    1. 您的设备可能不支持获取特定大小和类型的 3 个流(用于 3 个表面)。您应该验证您的设备上有哪些支持(LEGACY/LIMITED/FULL)。例如,您的设备可能不支持最大大小的 3 个同时流。检查documentation。有很好的表格显示了可能的情况,并仔细检查您的尺寸/类型是否合适。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-06
      • 2020-05-05
      • 1970-01-01
      • 2016-01-13
      • 2010-12-04
      • 1970-01-01
      • 2016-06-13
      • 2020-12-05
      相关资源
      最近更新 更多