Android-实时处理预览帧

时间:2019-05-21 11:45:03

标签: java android bitmap android-camera2

我想了解有关Camera2 API的更多信息。因此,我从这里https://github.com/googlesamples/android-Camera2Basic下载了Camera2的官方示例,并对其进行了一些测试,直到了解了它的工作原理。 因此,现在我问自己是否可以实时处理帧,这是一个很酷的功能。 我假设可以在 ImageReader 类的 onImageAvailable ()方法中完成此操作。

因此,我实现了以下几行

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 ()方法,该方法是Floyd-Steinberg算法的本机实现。 本机实现的工作是获取像素,然后根据上述算法对其进行处理,然后将处理后的像素返回,该像素又将成为位图的新像素。

但是现在:如何在屏幕上看到新的(处理过的)位图?更具体地说,是否有一种方法可以将该位图转换为图像?

我发现了一些camera2 output to BitmapAndroid Camera2 API Showing Processed Preview Image之类的SO线程,但是我对此并不太了解。

0 个答案:

没有答案