ImageReader приобретает последний образ с другим разрешением, чем сам ImageReader на Galaxy S6
Я пытаюсь прочитать изображение из ImageReader с определенным разрешением (получено из CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP
конечно), но ImageReader.acquireLastestImage
возвращает изображение другого разрешения!
Примечание: это происходит только (насколько я видел) на Samsung Galaxy S6 с разрешением предварительного просмотра, установленным на 800x450, и выходное разрешение на изображении, по-видимому, составляет 640x480. Другие разрешения кажутся нормальными, как и другие телефоны.
Соответствующий код:
Image im = mReader.acquireLatestImage();
Log.v(TAG, String.format("Image size %d x %d", im.getWidth(), im.getHeight()));
Log.v(TAG, String.format("ImageReader size %d x %d", mReader.getWidth(), mReader.getHeight()));
Выходной журнал:
01-30 15:43:46.350 31422-31954/com.myapp V/ImageProcessor: Image size 640 x 480
01-30 15:43:46.350 31422-31954/com.myapp V/ImageProcessor: ImageReader size 800 x 450
Что может быть не так? Ошибка в Android? Ошибка в реализации Galaxy S6?
Разве не гарантируется, что камера будет выполнять запрос поверхности ImageReader?
2 ответа
Проблема может заключаться в том, что вы читаете "неправильные" выходные данные. Попробуйте получить выходные размеры с тем же ImageFormat
это используется при инициализации вашего ImageReader.
Так, например, если вы инициализируете свой ImageReader с
ImageReader.newInstance(width, height, ImageFormat.JPEG, 1)
Получите ваши доступные размеры вывода с
cameraCharacteristics
.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)
.getOutputSizes(ImageFormat.JPEG)
В моем случае я использовал ImageReader.class
вместо ImageFormat.JPEG
при получении доступных размеров вывода, таким образом, я получил некоторые размеры вывода, которые не были поддержаны форматом JPEG.
У меня нет S6 под рукой, (и если бы я имел, это может не совпадать с вашим). Тем не менее, я могу подтвердить, что 800x450 - очень странное разрешение для камеры телефона. Это может быть ошибкой на некоторых устройствах S6, которая делает ложное утверждение о поддержке этого размера предварительного просмотра.
Если это так, я не удивлюсь: я видел несколько моделей от разных брендов, которые имели похожие ошибки, в том числе Samsung Galaxy Nexus, который ложно сообщил о поддержке 320x240. Это устройство также (как и ваш S6) создавало изображения разного размера, когда наше приложение запрашивало QVGA.
Сказав это, я также могу рассмотреть ошибку в вашем коде, например, если вы перечислите поддерживаемые разрешения для передней камеры и примените одно из них к задней камере.
В любом случае, предустановленное приложение камеры не использует 800x450: