К любому API, к сожалению, вам нужно самостоятельно обрабатывать данные YUV.
Устройства камеры изначально генерируют данные YUV, а не RGB, поэтому API не тратит дополнительные ресурсы на автоматическое преобразование данных.Основное простое исключение - передача данных в графический процессор, где драйвер графического процессора автоматически преобразует YUV в RGB для вас в пиксельном шейдере.
Но если вы просто в обычном коде приложения, вам нужно проанализироватьdata.
Для устаревшего API android.hardware.Camera выходные данные по умолчанию равны NV21, и вы обычно можете выбрать YV12 в качестве другого варианта.
Статья Википедии о YUV относительно полезна:https://en.wikipedia.org/wiki/YUV
Но он имеет неправильные коэффициенты преобразования для преобразования YUV-> RGB;они должны быть:
R = Y + 1.402 (Cr-128)
G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)
B = Y + 1.772 (Cb-128)
(Cb = U, Cr = V)
Вы также можете взглянуть на этот пост stackoverflow: Извлечь черно-белое изображение из формата NV21 камеры Android
, который имеет код, которыйвыглядит правильно для преобразования.