Android - обрабатывать кадры предварительного просмотра в режиме реального времени - PullRequest
0 голосов
/ 21 мая 2019

Я хотел бы узнать больше об Camera2 API.Итак, я скачал официальный образец Camera2 отсюда https://github.com/googlesamples/android-Camera2Basic и немного поиграл с ним, пока не понял, как он работает.Итак, теперь я спросил себя, могу ли я обрабатывать кадры в режиме реального времени, что было бы крутой функцией.Я предполагаю, что это можно сделать с помощью метода onImageAvailable () класса ImageReader .

Поэтому я реализовал следующие строки

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

        @Override
        public void onImageAvailable(ImageReader reader) {

            Image image = null;
            int width, heigth;
            int[] pixels;
            try {
                image = reader.acquireLatestImage();
                if (image != null) {

                    ByteBuffer buffer = image.getPlanes()[0].getBuffer();
                    byte[] bytes = new byte[buffer.capacity()];
                    buffer.get(bytes, 0, bytes.length);

                    Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);;

                    width = bitmap.getWidth();
                    heigth = bitmap.getHeight();
                    pixels = new int[width*heigth];

                    bitmap.getPixels(pixels, 0, width, 0, 0, width, heigth);
                    FilterLib.floydsteinberg(pixels, width, heigth);
                    bitmap.setPixels(pixels, 0, width, 0, 0, width, heigth);


                    image.close();
                }
            } catch (Exception e) {
                Log.w("ImageReader", e.getMessage());
            }

            mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));
        }

    };

Итак, я сделал, чтобы извлечь растровое изображение из изображения.Полученное растровое изображение затем передается методу floydsteinberg (), который является нативной реализацией алгоритма Флойда-Стейнберга.Нативная реализация делает так, чтобы получать пиксели, обрабатывать их на основе упомянутого алгоритма и возвращать обработанные пиксели обратно, которые, в свою очередь, теперь будут новыми пикселями растрового изображения.

Но теперь: как я могу увидетьчто нового (обработанного) растрового изображения на экране?Точнее говоря, есть ли способ преобразовать это растровое изображение в изображение?

Я нашел несколько потоков SO, таких как camera2, выводимых в Bitmap или Android Camera2 API, показывающих обработанное предварительное изображение , но я не мог понять из этого слишком много.

...