Bearbeiten nach Klärung der Frage; Original-Antwort am Ende
Hängt davon ab, wo Sie Ihre Verarbeitung machen.
Wenn Sie RenderScript verwenden, können Sie eine Surface von einer SurfaceView oder einer TextureView mit einer Zuweisung verbinden (mit setSurface) und dann Ihre verarbeitete Ausgabe an diese Zuweisung schreiben und sie mit Allocation.ioSend() senden. Die HDR Viewfinder demo verwendet diesen Ansatz.
Wenn Sie EGL-Shader-basierte Verarbeitung durchführen, können Sie eine Surface mit einer EGLSurface mit eglCreateWindowSurface verbinden, mit dem Surface als native_window Argument. Dann können Sie Ihre endgültige Ausgabe an diese EGL-Oberfläche rendern und wenn Sie eglSwapBuffers aufrufen, wird der Puffer an den Bildschirm gesendet.
Wenn Sie eine native Verarbeitung durchführen, können Sie NDK ANativeWindow methods verwenden, um auf eine Oberfläche zu schreiben, die Sie von Java und convert an ein ANativeWindow übergeben.
Wenn Sie Java-Level-Verarbeitung machen, ist das wirklich langsam und Sie wahrscheinlich nicht wollen. Aber kann die neue Android M ImageWriter Klasse verwenden, oder laden Sie eine Textur auf EGL für jeden Frame.
Oder wie Sie sagen, zu einem ImageView jeden Rahmen zu zeichnen, aber das wird langsam sein.
Ursprüngliche Antwort:
Wenn Sie JPEG-Bilder werden aufnehmen, können Sie einfach den Inhalt des ByteBuffer von Image.getPlanes()[0].getBuffer()
in eine byte[]
kopieren und dann BitmapFactory.decodeByteArray
verwenden Sie es in eine Bitmap zu konvertieren.
Wenn Sie YUV_420_888-Bilder erfassen, müssen Sie Ihren eigenen Konvertierungscode aus dem 3-Ebenen-Format YCbCr 4: 2: 0 in etwas schreiben, das Sie anzeigen können, z. B. ein int [] von RGB-Werten Bitmap von; Leider gibt es dafür noch keine praktische API.
Wenn Sie RAW_SENSOR-Bilder (unverarbeitete Bayer-Musterdaten) erfassen, müssen Sie eine ganze Menge Bildverarbeitung durchführen oder einfach eine DNG speichern.
Versuchen Sie dies für jeden Vorschau-Frame oder nur einmal (z. B. für jede Standbildaufnahme mit hoher Auflösung)? Abhängig von der Rate und der Auflösung sind möglicherweise unterschiedliche Anzeigeansätze geeigneter. –
Jeder Rahmen tatsächlich. Ich weiß, dass es Frames geben wird, die wegen des Zeitverlustes durch Bildverarbeitung nicht gezeigt werden können.Wenn das YUV Format mi 30 fps in der Vorschau liefert und ich 20 Frames von insgesamt 30 pro Sekunde verarbeiten kann, möchte ich diesen 20 Frame auf dem Bildschirm zeigen. – rcmalli