2010-01-11 14 views
5

Estoy escribiendo una aplicación para Android. Necesito hacer un procesamiento de imagen en la foto tomada desde la cámara. Uso Camera.PictureCallback para obtener la foto y obtengo una imagen en el conjunto de bytes. El problema es que quiero hacer operaciones en cada píxel de la foto (algunos filtros y otras cosas) así que supongo que tener una foto en una matriz de bytes no es una mala idea. Pero no sé cómo interpretar la información en esta matriz de bytes ... La única forma que conozco de hacer el procesamiento es usar BitmapFactory.decodeByteArray() y luego usar el objeto Bitmap. ¿Es esta una buena manera de manejar un montón de procesamiento de imágenes? Ahora mismo usar algo tener este aspecto:Procesamiento de imágenes en Android

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

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

Agradezco cualquier ayuda.

Respuesta

7

No estoy seguro de si la descodificación en una matriz de bytes es la mejor manera de hacerlo en Android, pero puedo ofrecer lo que sé sobre el procesamiento de imágenes en general.

Si está usando RGB_565, eso significa que cada píxel es de 16 bits, o dos de esos bytes. Los primeros 5 bits son rojos, los siguientes 6 son verdes y los últimos 5 son azules. Tratar con eso es peludo en Java. Le sugiero que trabaje con un formato más fácil como ARGB_8888, lo que significa que tiene 32 bits, o cuatro bytes por píxel, y cada byte tiene su propio valor (alfa, rojo, verde, azul).

Para probar, intente configurar cada cuarto byte, como [3], [7], [11], etc., a 0. Esto se debe sacar todo de un canal en particular, en este caso, todo el azul.

[2], [6], [10], etc. serían todos los valores en verde para cada píxel.

(Nota, los cuatro componentes podría ir en el orden opuesto, porque no estoy seguro acerca de endianness! Así que podría haber acabo de decir cómo sacar el alfa, no el azul ...)

+0

Gracias a este información útil. Ahora sé por documentos que puedo tomar fotos solo en estos formatos: PixelFormat.YCbCr_420_SP (NV21), PixelFormat.RGB_565 o PixelFormat.JPEG Así que supongo que intento escribir la codificación RGB_565. – Kubeczek

+0

Derecha. Edite en ese formato o encuentre una forma de convertir antes de editar. –

Cuestiones relacionadas