2010-07-23 6 views
6

Ich frage, ob es einen einfachen Weg gibt, weil es einen Google-Problembericht gibt, der sagt, dass die Verwendung von decodeByteArray nicht möglich ist. Aber dieser Bericht entstand 2008 und ich hatte gehofft, dass dort eine Lösung nicht veröffentlicht wurde. Die Methode, die im Problembericht aufgelistet ist, sollte das Format selbst entschlüsseln, aber ich würde es vorziehen, das nicht zu tun und das Programm zu verlangsamen. Jede Hilfe würde geschätzt werden.Gibt es eine einfache Möglichkeit, das Byte-Array aus dem onPreviewFrame der Kamera in ein Bild in Android zu verwandeln?

Antwort

3

Der einfachste Weg ist, ein BufferedImage die folgende Weise zu erzeugen:

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

Daten sind der Byte-Array.

+0

Ähm sind Sie sicher, dass das in Android funktioniert? Ich kann kein Referenzmaterial für BufferedImage oder ImageIO finden. Es ist in der Java-Sprachreferenz aufgeführt, aber nicht Android – RyoxSinfar

+0

Ja, ich kopierte den falschen Code. Ich habe meine Antwort geändert. Es tut uns leid. – RoflcoptrException

+0

THats, was ich ursprünglich dachte, war die Antwort, aber es gibt mir eine Null-Bitmap zurück. – RyoxSinfar

8

Ich nehme an, Ihr Byte-Array stammt aus der Kameravorschau? Wenn ja, müssen Sie es entschlüsseln, aber mit 2.2 ist es jetzt ganz einfach.

Erstellen ein YUV-Bild aus dem Array Byte als die Daten nur in ImageFormat.NV21(int code 17)

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

ein Rechteck mit der gleichen Größe wie das Bild erstellen sein.

Erstellen Sie eine ByteArrayOutputStream und übergeben Sie dieses, das Rechteck und den Komprimierungswert an compressToJpeg().

Dann können Sie

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

ich diese verwenden für jeden Frame in den Rückruf verwenden und es funktioniert gut. Hoffe das hilft.

+0

Können Sie Ihren Code richtig anzeigen? – Nepster

Verwandte Themen