ich versuche, Bild von YUV_420_888 zu rgb zu konvertieren, und ich habe einige Probleme mit dem Ausgabebild. In ImageReader erhalte ich ein Bild im Format YUV_420_888 (mit Kamera 2 api für diese Bildvorschau).
%Vor%In android SDK für YuvImage Klasse schreiben, dass YuvImage nur mit NV21, YUY2.
da wir den Unterschied zwischen N21 und yuv420 nicht groß sehen können und versuche, Daten in N21 zu konvertieren
in onImageAvailable bekomme ich separat alle Planes und lege sie an den richtigen Platz (wie auf dem Bild)
%Vor%nach dem Erstellen von YuvImage, umwandeln in Bitmap, anzeigen und speichern
%Vor%aber mein gespeichertes Bild ist grün und pink:
Was habe ich vermisst?
Beim Konvertierungsversuch gibt es zwei Hauptprobleme:
U-PLANE = {U1, V1, U2, V2, ...}
). Tatsächlich könnte es sogar ein NV21-Interleaving sein. Der Schlüssel hier ist der Zeilenschritt und Pixelschritt und überprüfe auch, was wir von YUV_420_888 Format . Ich habe die YUV_420-Logik (genau wie im obigen Diagramm gezeigt) in RenderScript implementiert, siehe vollständigen Code hier:
Konvertierung von YUV_420 _888 in Bitmap, vollständiger Code
Es produziert perfekte Bimaps für API 22, aber für API 21 zeigt es die "grüne Idylle". Von diesem kann ich bestätigen, die Ergebnisse, die Sie gefunden haben. Wie bereits oben von Silvaren erwähnt, scheint der Grund ein Android-Fehler in API 21 zu sein. Wenn ich meinen RS-Code betrachte, ist klar, dass wenn die U- und V-Information fehlt (dh Null), die G (reen) ARGB-Komponente sehr groß wird die Umwandlung.
Ich sehe ähnliche grüne Bilder auf meinem Galaxy S5 (immernoch API 21) - hier sogar kopfüber ;-). Ich vermute, dass die meisten Geräte auf API 21 derzeit Camera2 noch nicht für ihre Gerätekamera-Apps verwenden. Es gibt eine kostenlose App namens "Manual Camera Compatibility", die es erlaubt, dies zu testen. Daraus ersehe ich, dass die S5 / API21 in der Tat immer noch nicht Camera2 nutzt ... zum Glück nicht ...
Tags und Links android image android-camera yuv