2017-04-27 1 views

Répondre

0

Selon Mobile Vision documentation de l'API, l'objet Frame a méthode getBitmap() mais il est clairement indiqué que

GetBitmap()
Renvoie le bitmap qui a été spécifié dans la création de ce cadre, ou null si aucune bitmap a été utilisé pour créer ce cadre.

Si vous voulez vraiment obtenir un objet Bitmap, vous devrez le créer vous-même. Une des options est par la méthode getGrayscaleImageData() sur l'objet Frame.
S'il existe des octets dans ByteBuffer retournés, vous pouvez le convertir en Bitmap.

Premièrement, vous devez créer YuvImage en utilisant le tableau de byte de votre résultat getGrayscaleImageData(). C'est une étape obligatoire car le tableau d'octets contient une image dans l'espace colorimétrique YUV/YCbCr, codé au format NV21. Donc, première ligne ressemblera à ceci:

YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, width, height, null); 

width et height peut être extraite de la trame par getMedatada().getHeight()/getMedatada().getWidth() méthodes.

Ensuite, vous pouvez utiliser ByteArrayOutputStream pour compresser rapidement votre objet YuvImage.

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, byteArrayOutputStream); 

De là, vous pouvez le convertir à l'octet nouveau tableau d'utiliser finalement dans BitmapFactory.

byte[] jpegArray = byteArrayOutputStream.toByteArray(); 
Bitmap bitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length); 

Je sais qu'il est beaucoup de code de comparaison avec l'utilisation de la méthode simple, getBitmap(), mais il fera le travail si vous avez vraiment besoin bitmap dans ce genre de situation.