2010-07-23 3 views
6

Chiedo se c'è un modo semplice perché c'è un rapporto sul problema di google che dice che l'uso di decodeByteArray non è possibile. Ma quel rapporto è nato nel 2008 e speravo che non ci fosse una soluzione. Il metodo elencato nel rapporto sul problema consisteva nel decodificare il formato personalmente, ma preferirei non doverlo inserire e rallentare il programma. Qualsiasi aiuto sarebbe apprezzato.C'è un modo semplice per trasformare l'array di byte dalla telecamera suPreviewFrame in un'immagine in Android?

risposta

3

Il modo più semplice è quello di creare un BufferedImage seguente modo:

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

dati è il byte.

+0

Sei sicuro che funzioni in Android? Non riesco a trovare alcun materiale di riferimento per BufferedImage o ImageIO. È elencato nella lingua di riferimento Java ma non in Android – RyoxSinfar

+0

Sì, ho copiato il codice sbagliato. Ho modificato la mia risposta. Scusate. – RoflcoptrException

+0

Sembra che la risposta fosse originariamente, ma mi restituisce una bitmap nullo. – RyoxSinfar

8

Suppongo che l'array di byte provenga dall'anteprima della telecamera? Se è così, devi decodificarlo ma con 2.2 è abbastanza facile ora.

creare un'immagine YUV dalla matrice byte come i dati saranno solo in ImageFormat.NV21(int code 17)

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

creare un rettangolo le stesse dimensioni dell'immagine.

Creare un ByteArrayOutputStream e passare questo, il rettangolo e il valore di compressione a compressToJpeg().

Quindi è possibile utilizzare

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

Io lo uso per ogni fotogramma nel callback e funziona benissimo. Spero che questo ti aiuti.

+0

Puoi mostrare correttamente il tuo codice – Nepster