2010-07-23 8 views
6

Pregunto si hay una manera simple porque hay un informe de problema de Google que dice que usar decodeByteArray no es posible. Pero ese informe se originó en 2008 y esperaba que hubiera una solución no publicada allí. El método enumerado en el informe de problemas era decodificar el formato usted mismo, pero preferiría no tener que ponerlo en el programa y ralentizarlo. Cualquier ayuda sería apreciada.¿Hay una forma simple de convertir la matriz de bytes del onPreviewFrame de la cámara en una imagen en Android?

Respuesta

3

La forma más fácil es crear un BufferedImage la siguiente manera:

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0. data.length); 

datos es la matriz de bytes.

+0

¿Estás seguro de que funciona en Android? No puedo encontrar ningún material de referencia para BufferedImage o ImageIO. Está listado en la referencia del lenguaje Java pero no en el de Android – RyoxSinfar

+0

Sí, copié el código incorrecto. Modifiqué mi respuesta Lo siento. – RoflcoptrException

+0

Lastima lo que originalmente pensé que era la respuesta, pero me devuelve un mapa de bits nulo. – RyoxSinfar

8

Supongo que su matriz de bytes proviene de la vista previa de la cámara? Si es así, debes decodificarlo pero con 2.2 es bastante fácil ahora.

crear una imagen YUV de la matriz de bytes que los datos sólo estarán en ImageFormat.NV21(int code 17)

img = new YuvImage(imgData, ImageFormat.NV21, width, height, null); 

crear un rectángulo del mismo tamaño que la imagen.

Crea un ByteArrayOutputStream y pasa este, el rectángulo y el valor de compresión a compressToJpeg().

continuación, puede utilizar

Bitmap mBitmap = BitmapFactory.decodeByteArray(outputStream.toByteArry(),0,outputStream.size()); 

lo uso para todos los fotogramas de la devolución de llamada y funciona bien. Espero que esto ayude.

+0

¿Puedes mostrar tu código correctamente? – Nepster

Cuestiones relacionadas