Grüne Bilder bei einer JPEG-Kodierung von YUV_420_888 mit der neuen Android-Kamera2-api

Ich bin versucht, die neue Kamera-api. Die burst-Erfassung im Begriff war zu langsam, so dass ich die YUV_420_888-format in den ImageReader und eine JPEG-enconding später, als wurde vorgeschlagen, in den folgenden post:

Android-Kamera2-capture-burst ist zu langsam

Das problem ist, dass ich immer grüne Bilder, wenn ich versuchen zu codieren JPEG aus YUV_420_888 mit RenderScript wie folgt:

RenderScript rs = RenderScript.create(mContext);
ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic = ScriptIntrinsicYuvToRGB.create(rs, Element.RGBA_8888(rs));
Type.Builder yuvType = new Type.Builder(rs, Element.YUV(rs)).setX(width).setY(height).setYuvFormat(ImageFormat.YUV_420_888);
Allocation in = Allocation.createTyped(rs, yuvType.create(), Allocation.USAGE_SCRIPT);

Type.Builder rgbaType = new Type.Builder(rs, Element.RGBA_8888(rs)).setX(width).setY(height);
Allocation out = Allocation.createTyped(rs, rgbaType.create(), Allocation.USAGE_SCRIPT);

in.copyFrom(data);

yuvToRgbIntrinsic.setInput(in);
yuvToRgbIntrinsic.forEach(out);

Bitmap bmpout = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
out.copyTo(bmpout);

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmpout.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] jpegBytes = baos.toByteArray();

Daten-variable (die YUV_420_888 Daten) ermittelt sich aus:

ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
byte[] data = new byte[buffer.remaining()];
buffer.get(data);

Was mache ich falsch in der JPEG-Kodierung zu erhalten, werden die Bilder nur in grün?

Vielen Dank im Voraus

Bearbeitet werden: Dies ist ein Beispiel für die Bilder in grün, die ich erhalten:

https://drive.google.com/file/d/0B1yCC7QDeEjdaXF2dVp6NWV6eWs/view?usp=sharing

  • FWIW, ein YUV-Wert 0,0,0 ist eine mittlere grüne Farbe. Also, wenn Ihr Bild ist ganz grün, meine Vermutung ist, das Sie konvertieren einen Puffer voll von Nullen, anstatt einen Puffer voll von YUV-pixel-Daten.
  • Ich habe bearbeitet die Frage mit einem Beispiel, die Bilder, die ich abrufen. Sie sind sich nicht ganz grün, es scheint grün-Skala. Ich denke, das ist, weil ich die Daten nur aus der ersten Ebene der drei, YUV-format haben. Ich Suche einen Weg, um die Informationen aus den drei Ebenen und es passieren die RenderScript, aber ich war nicht in der Lage, um den kleinen code, den ich gefunden habe, arbeiten.
  • HI, hast du es geschafft dieses problem zu lösen?
  • Ich habe versucht die codes und die gespeicherte png-Bild ist grün. Es scheint, dass ScriptIntrinsicYuvToRGB nicht verwandeln YUV_420_888 in bitmap. Haben Sie einen anderen Weg finden, es zu erreichen?
InformationsquelleAutor Yamidragut | 2015-04-15
Schreibe einen Kommentar