Ошибка при выходе из Camera2BasicFragment (пользовательская камера Android, использующая Camera2 API) для отображения захваченного изображения в следующем действии - PullRequest
0 голосов
/ 07 марта 2019

Я использовал пример кода от 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));

        }

    }
...