Последовательность действий такова:
Вы создаете анализ изображения
Код: Выделить всё
mImageAnalysis = new ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_RGBA_8888)
.build();
ImageProxy, затем кодируется в MPImage. Есть несколько способов сделать это. Вы можете извлечь растровое изображение из ImageProxy или просто использовать MediaImageBuilder следующим образом:
Код: Выделить всё
MPImage mpImage = new MediaImageBuilder(image.getImage()).build();
Я просмотрел исходный код MPImage/MediaImageBuilder, и независимо от того, какой входной сигнал (изображение или растровое изображение), он перекодирует данные в ARGB_8888 формат. Если вы передаете, например, растровое изображение (например, то, которое вы можете получить из image.getImage().toBitmap()), оно перекодирует его из RGBA в ARGB.
В документации указано, что если вы создали MPImage с помощью MediaImageBuilder, вам следует извлечь его с помощью MediaImageExtractor, но это не работает, поскольку MPImage перекодировал его в Растровое изображение.
Если вы используете растровое изображение = BitmapExtractor.extract(image); и устанавливаете растровое изображение в ImageView, изображение имеет неправильные цвета и видимые полосы.
Это кажется весьма неожиданным, поскольку все это библиотеки Google, а растровые изображения Google работают только с форматом ARGB.
Мне нужно выполнить дальнейшую обработку обнаруженного изображения, поэтому очень важно вернуть его в растровую форму. Я пробовал различные способы перестановки битов, чтобы переупорядочить байты, но это не сработало. Он остается искаженным и полосатым. Кроме того, самым верхним байтом всегда является xFF, который похоже указывает на то, что это альфа-канал (в отличие от того, что он находится в конце, как можно было бы ожидать, если байты действительно находятся в порядке RGBA).
Попытка выбрать одно значение (R, G или B) и поместить его во все значения RGB для создания изображения в оттенках серого по-прежнему приводит к появлению полос, что указывает на что это не просто перестановка битов.

Подробнее здесь: https://stackoverflow.com/questions/797 ... tmap-bitma
Мобильная версия