2017-04-27 6 views

Antwort

0

Laut Mobile Vision-API-Dokumentation, hat Frame Objektmethode getBitmap() aber es ist klar gesagt, dass

GetBitmap()
die Bitmap Kosten, die bei der Erstellung dieses Rahmens angegeben wurde, oder null, wenn keine Bitmap verwendet wurde um diesen Rahmen zu erstellen.

Wenn Sie ein Bitmap-Objekt wirklich erhalten möchten, müssen Sie es selbst erstellen. Eine Option ist getGrayscaleImageData() Methode auf Frame Objekt.
Wenn einige zurückgegebene Bytes ByteBuffer zurückgegeben werden, können Sie sie in Bitmap konvertieren.

Zuerst müssen Sie YuvImage mit Byte-Array von Ihrem getGrayscaleImageData() Ergebnis erstellen. Dies ist ein obligatorischer Schritt, da das Byte-Array ein Bild in YUV/YCbCr Farbraum hat, das in NV21 codiert ist. Also erste Zeile wird wie folgt aussehen:

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

width und height können durch getMedatada().getHeight()/getMedatada().getWidth() Methoden aus dem Rahmen extrahiert werden.

Dann können Sie ByteArrayOutputStream verwenden, um schnell Ihr YuvImage Objekt zu komprimieren.

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

Von dort können Sie wandeln es wieder auf Byte-Array, um es schließlich in BitmapFactory zu verwenden.

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

Ich weiß, dass es eine Menge Code ist auf einfache getBitmap() Methode Nutzung zu vergleichen, aber es wird die Arbeit tun, wenn Sie wirklich Bitmap in einer solchen Situation brauchen.

Verwandte Themen