1

我使用来自 Google 的示例代码来实现使用 Camera2 API 的自定义相机。我想在下一个活动中显示捕获的图像。

Camera2Basic 示例代码

但是,我无法安全退出 Camera2BasicFragment 并启动下一个活动以显示捕获的图像。

这是我试图开始下一个活动的代码:

private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
            = new ImageReader.OnImageAvailableListener() {

        @Override
        public void onImageAvailable(ImageReader reader) {
            mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));

            startActivity(new Intent(getActivity(), DisplayImage.class));
        }

    };

这是保存图像并裁剪它的功能。我不确定裁剪是否正确。我只想能够首先在下一个活动中显示图像。当我稍后返回拍摄更多图像时,相机必须工作正常。

 private class ImageSaver implements Runnable {

        /**
         * The JPEG image
         */
        private final Image mImage;
        /**
         * The file we save the image into.
         */
        private final File mFile;

        ImageSaver(Image image, File file) {
            mImage = image;
            mFile = file;
        }

        @Override
        public void run() {
            ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
            byte[] bytes = new byte[buffer.remaining()];
            buffer.get(bytes);
            FileOutputStream output = null;
            try {
                output = new FileOutputStream(mFile);
                output.write(bytes);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                mImage.close();
                if (null != output) {
                    try {
                        output.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }

            capturedImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

            int width = linearLayout.getWidth();
            int height = linearLayout.getHeight();

            int left = width/6;
            int top = height/8;

            croppedImage = Bitmap.createBitmap(capturedImage, left, top, 5*(width/6), 2*(height/3));

        }

    }
4

0 回答 0