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
Il modo più semplice è quello di creare un BufferedImage seguente modo:
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0. data.length);
dati è il byte.
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.
Puoi mostrare correttamente il tuo codice – Nepster
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
Sì, ho copiato il codice sbagliato. Ho modificato la mia risposta. Scusate. – RoflcoptrException
Sembra che la risposta fosse originariamente, ma mi restituisce una bitmap nullo. – RyoxSinfar