2015-02-10 30 views
6

Ich versuche, Kamera Vorschau Bilddatenverarbeitung mit Camera2 API zu implementieren, wie hier vorgeschlagen: Camera preview image data processing with Android L and Camera2 API.Convert android.media.Image (YUV_420_888) zu Bitmap

Ich habe erfolgreich Callbacks mit OnImageAvailableListener erhalten, aber für zukünftige Verarbeitung muss ich Bitmap von YUV_420_888 android.media.Image erhalten. Ich suchte nach ähnlichen Fragen, aber keine half mir.

Könntest du mir bitte vorschlagen, wie man android.media.Image (YUV_420_888) in Bitmap umwandelt oder vielleicht gibt es eine bessere Möglichkeit, für Vorschaubilder zu hören?

Antwort

2

Ich schreibe etwas Code darüber, und es ist die YUV-Daten Vorschau und chang es zu JPEG-Daten, und ich kann es als Bitmap, Byte [], oder andere zu speichern. (Sie können die Klasse "Zuordnung" sehen).

Und SDK-Dokument sagt:
"Für eine effiziente YUV-Verarbeitung mit android.renderscript: Erstellen Sie eine RenderScript-Zuweisung mit einem unterstützten YUV-Typ, dem IO_INPUT-Flag und einer der von getOutputSizes (Allocation.class) zurückgegebenen Größen Oberfläche mit getSurface(). "

hier ist der Code, hoffe, es wird Ihnen helfen: https://github.com/pinguo-yuyidong/Camera2/blob/master/camera2/src/main/rs/yuv2rgb.rs

2

Für eine einfachere Lösung hier meine Implementierung sehen:

Conversion YUV 420_888 to Bitmap (full code)

Die Funktion der media.image als Eingabe und erzeugt drei RenderScript-Zuweisungen basierend auf den y-, u- und v-Ebenen. Es folgt der YUV_420_888-Logik, wie in dieser Wikipedia-Illustration gezeigt.

enter image description here

jedoch hier haben wir drei separate Bildebene für die Y-, U- und V-Kanäle, so nehme ich diese als drei byte [], d.h. Zuteilungen U8. Die y-Zuweisung weist die Größe width * height bytes auf, während die u- und v-allocaton die Größe width * height/4 bytes haben, was die Tatsache widerspiegelt, dass jedes u-Byte 4 Pixel (dito jedes v-Byte) abdeckt.