Ich muss ein Video aufnehmen, das nur einen einzigen Frame enthält: ein vom Benutzer angegebenes Bild (es kann beliebig lang sein, aber es hat nur das gleiche statische Bild). Also dachte ich, ich könnte den neuen MediaRecorder.VideoSource.SURFACE verwenden und einfach auf die Oberfläche zeichnen, die vom Rekorder benutzt wird. Ich initialisiere den Recorder richtig, und ich kann MediaRecorder.getSurface() ohne Ausnahme (etwas, das anscheinend schwierig ist) sogar aufrufen.Erforderlich, um zu der von MediaRecorder verwendeten Oberfläche zu zeichnen
Mein Problem ist etwas peinlich: Ich weiß nicht, was ich mit der Oberfläche tun soll zurückgegeben. Ich muss es irgendwie zeichnen, aber alle Beispiele, die ich finden kann, beziehen sich auf ein SurfaceView. Wird diese Oberfläche von MediaRecorder.setPreviewDisplay() verwendet? Wie zeichne ich etwas dazu?
Ich habe es gerade versucht: Nachdem die Aufnahme gestartet wurde, rief ich lockCavas() an, zeichnete eine Linie auf der Zeichenfläche und nannte dann unlockAndPostCanvas(). Als ich jedoch die Aufzeichnung gestoppt habe, habe ich eine RuntimeException bekommen, die laut Dokumentation bedeutet, dass keine gültigen Daten für die Aufzeichnung empfangen wurden. Ich habe das Problem der falschen Farbverschiebung nicht wie in dem von Ihnen geposteten Link gefunden. Irgendwelche Ideen? –
Farbkanalumkehr ist ein mögliches Ergebnis; völliges Versagen ist ein anderes. Klingt so, als müssten Sie die GLES-Route gehen. (Es ist möglich, Software-Rendering zu verwenden, um ein Bitmap außerhalb des Bildschirms zu erstellen, das Bitmap als Textur mit 'glTexImage2D()' zu laden und das ... zu rendern, so dass Sie nicht das gesamte Rendering in GLES-Befehle konvertieren müssen.) Wenn Sie mit dem Code in Grafika beginnen, und nur 'glClear()' und die Schere rect, um farbige Rechtecke auf dem Bildschirm zu zeichnen, sollte es möglich sein, Dinge zu testen, ohne mehr als nur Ihre Zehen in GLES einzutauchen. – fadden