Я понимаю, что этот ответ немного запоздал, но вот то, что я узнал за последний месяц, работая с камерой.
Получаете ли вы необработанные данные изображения через onPictureTaken или onPreviewFrame , они могут быть закодированы в нескольких различных форматах (android.graphics.ImageFormat). Единственной гарантированной универсальной поддержкой (согласно документации) является NV21, универсальная поддержка YV12 от сот и выше. Помимо универсальной поддержки, NV21 может очень хорошо соответствовать тому, что вы пытаетесь сделать (конвертировать в черно-белое). NV21 - это формат YUV, где канал Y несет информацию о яркости, а каналы U и V - информацию о цвете. Смотрите более формальное описание здесь:
http://en.wikipedia.org/wiki/YUV
http://www.fourcc.org/fccyvrgb.php
http://www.fourcc.org/yuv.php#NV21
Ссылка на вики содержит пример источника, который обеспечивает преобразование NV21-> RGB (не очень эффективно, как есть, но дает хорошее представление об общем подходе). Если вам интересно сделать это преобразование в C или ассемблере, это был хороший источник информации (предупреждение: нет кода для NV21, и мои быстрые модификации для обработки NV21 не дали ничего хорошего). Тем не менее, он показывает, как включить файлы .S в проекты ndk, что на самом деле очень просто.
http://www.roman10.net/effective-color-conversion-yuv-rgb-in-android-in-assembly/
Вернуться к вашему вопросу - конвертация в ч / б. Просто возьмите канал Y и сформируйте тройки RGB как [Y, Y, Y], и это даст вам черно-белое изображение. Или, может быть, просто сделать из него изображение L8 (например, Y-> L).
PS.
Существует большая путаница в отношении диапазона / масштабирования значений YUV при преобразовании в RGB. Я обнаружил, что данные камеры поступают полным ходом (0-255, а не 16-235 или 16-240), и что ограничение результата до 0-255 после умножения матрицы дает визуально приятный результат, а масштабирование до искажений 0-255 цвета (само собой разумеется, это все еще верно, если вы масштабируете до некоторого другого диапазона, такого как 16-240). Эти наблюдения противоречат некоторым тонкостям процедуры полного преобразования, описанной в ссылках выше, но я нашел, что это сработало.