2010-01-11 3 views
5

Я пишу приложение для Android. Мне нужно сделать некоторую обработку изображения на снимке, снятом с камеры. Я использую Camera.PictureCallback, чтобы получить фотографию, и я получаю изображение в массиве байтов. Проблема в том, что я хочу делать операции на каждом пикселе фотографии (некоторые фильтры и другие вещи), поэтому, я думаю, есть фото в массиве байтов, это не плохая идея. Но я не знаю, как интерпретировать информацию в этом массиве байтов ... Единственный способ, которым я знаю, чтобы сделать обработку, - использовать BitmapFactory.decodeByteArray(), а затем использовать объект Bitmap. Является ли это хорошим способом обработки большого количества изображений? Сейчас я использую что-то выглядеть следующим образом:Обработка изображений на Android

Bitmap mPhotoPicture mPhotoPicture = BitmapFactory.decodeByteArray (ImageData, 0, imageData.length);

mPhotoPicture = mPhotoPicture.copy (Bitmap.Config.RGB_565, true);

Я ценю любую помощь.

ответ

7

Я не уверен, что декодирование в массив байтов - лучший способ сделать это на Android, но я могу предложить то, что знаю об обработке изображений в целом.

Если вы используете RGB_565, это означает, что каждый пиксель составляет 16 бит или два из этих байтов. Первые 5 бит являются красными, следующие 6 зелеными, а последние 5 - синими. Работа с этим является волосатой на Java. Я предлагаю вам работать с более легким форматом, например, ARGB_8888, что означает, что у вас есть 32 бита или четыре байта на пиксель, а каждый байт является его собственным значением (альфа, красный, зеленый, синий).

Чтобы проверить, попробуйте установить каждый четвертый байт, как [3], [7], [11] и т.д., 0. Это должно вынуть все из конкретного канала, в этом случае все синим.

[2], [6], [10] и т. Д. Все зеленые значения для каждого пикселя.

(Обратите внимание, что четыре компонента может идти в обратном порядке, потому что я не уверен, что порядок байтов! Так что я мог бы просто сказал вам, как вынуть альфа, а не синий ...)

+0

Спасибо за это Полезная информация. Теперь из документации я знаю, что могу фотографировать только в этих форматах: PixelFormat.YCbCr_420_SP (NV21), PixelFormat.RGB_565 или PixelFormat.JPEG Так что, я думаю, я пытаюсь написать кодировку RGB_565. – Kubeczek

+0

Справа. Либо отредактируйте в этом формате, либо найдите способ преобразования перед редактированием. –

Смежные вопросы