Android camera2 YUV 2048x1536 захваченное изображение растянуто (не превью)

Я пытаюсь сделать снимок YUV, но оно растянуто. Я использую Android Camera2 после этого https://github.com/googlearchive/android-Camera2Basic. Android SDK - 28.

Я сталкиваюсь со странным поведением, когда снимаю кадр камеры в YUV 2048x1536 из метода setOnImageAvailableListener () с помощью ImageReader. Захват растягивается:

YUV 2048x1536, растянутый

Что я делаю:

pictureImageReader.setOnImageAvailableListener(
            reader -> {
              Image image = reader.acquireLatestImage();
              if(image != null){
                ByteBuffer buffer = image.getPlanes()[0].getBuffer();
                byte[] bytes = new byte[buffer.capacity()];
                buffer.get(bytes);
                Bitmap bitmapImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);
                image.close();
              }
            }, mBackgroundHandler);

Чтобы преобразовать изображение в растровое, я использовал этот Как преобразовать android.media .Изображение в растровый объект?:

Image image = reader.acquireLatestImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
Bitmap bitmapImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);

Однако, если я изменю разрешение, мой захват будет в порядке (YUV 960x720):

YUV 960x720, нормально

Не знаю, почему захват в YUV 2048x1536 растянут, а в YUV 960x720 нет. Единственное изменение - это разрешение

Спасибо


person j11john    schedule 24.09.2020    source источник


Ответы (1)


Действительно ли устройство перечисляет 2048x1536 в качестве поддерживаемого размера в карте конфигурации потока? Иногда устройства камеры принимают разрешение, которое они на самом деле не перечисляют, но затем не могут правильно его выводить.

Если этот размер указан в списке, то, к сожалению, это может быть просто ошибка в реализации камеры на этом устройстве.

(Кроме того, похоже, что вы захватываете изображения в формате JPEG, а не в несжатом формате YUV, не то чтобы это обязательно имеет значение здесь).

person Eddy Talvala    schedule 24.09.2020
comment
Привет! список устройств с этим разрешением. Я сделал map.getOutputSizes (ImageFormat.YUV_420_888) и распечатал 2048x1536. Так вы говорите, что это ошибка устройства? Я имею в виду, что если я попробую в другом, может сработать? - person j11john; 25.09.2020