2010-07-23 8 views
6

Je demande s'il y a un moyen simple, car il y a un rapport d'émission Google en disant que l'utilisation decodeByteArray est impossible. Mais ce rapport est né en 2008 et j'espérais qu'il n'y avait pas de solution. La méthode indiquée sur le rapport de problème était de décoder vous-même le format, mais je préférerais ne pas avoir à le mettre dans et ralentir le programme. Toute aide serait appréciée.Yat-il un moyen simple de tourner le tableau d'octets de onPreviewFrame de la caméra dans une image dans Android?

Répondre

3

La façon la plus simple est de créer un BufferedImage de la manière suivante:

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

est le tableau d'octets.

+0

Um êtes-vous sûr qui fonctionne sous Android? Je ne trouve aucun document de référence pour BufferedImage ou ImageIO. Il est répertorié dans la référence de langage Java, mais pas Android – RyoxSinfar

+0

Oui, j'ai copié le mauvais code. J'ai modifié ma réponse. Pardon. – RoflcoptrException

+0

THats ce que je pensais à l'origine la réponse était, mais il me donne un bitmap nul retour. – RyoxSinfar

8

Je suppose que votre tableau d'octets est de l'aperçu de la caméra? Si c'est le cas, vous devez le décoder, mais avec 2.2, c'est assez facile maintenant.

Créer une image YUV à partir du tableau d'octets que les données ne seront ImageFormat.NV21(int code 17)

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

Créer un rectangle de la même taille que l'image.

Créez un ByteArrayOutputStream et transmettez-le, le rectangle et la valeur de compression à compressToJpeg().

Ensuite, vous pouvez utiliser

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

J'utilise ceci pour chaque image dans le rappel et il fonctionne très bien. J'espère que cela t'aides.

+0

Pouvez-vous montrer correctement votre code – Nepster