Bild- und Videofilter wie Snapchat in Android

9

Ich entwickle eine Anwendung, bei der die Filter so angewendet werden sollen, wie Snapchat funktioniert. Was ich verstehen kann ist, dass sie PagerAdapter verwenden, aber ich weiß nicht, wie sie Filter auf das Bild oder die Videos anwenden ein anderes Bild mit einem angewendeten Filter. Jede Idee oder Code-Snippet, die das gleiche tun können, wird für Bilder und Videos sowohl geschätzt als auch gespeichert. Danke: D

    
PunK _l_ RuLz 13.08.2015, 06:42
quelle

2 Antworten

2

Was ich hier mache, ist die Überlagerung von zwei Bitmaps übereinander. Wie viel eine der Bitmaps sichtbar sein soll, wird durch die Berührung des Benutzers bestimmt. Ich habe eine ENUM für welche Richtung sich der Benutzer im Grunde gelassen wird rollend oder RECHTS und NONE. Je nachdem, welche Richtung wird der Benutzer scrollt unterschiedlichen Bitmap auf der aktuellen Bitmap angewendet.

%Vor%

Das funktioniert ganz gut, ich habe einfach nicht auf Low-Memory-Geräten getestet bedenken, dass ich nicht viele finden könnte:)

Für eine vollständige Codereferenzprüfung das verlinken. Es ist meine eigene Bibliothek, in der Sie Bilder Filter anwenden erfassen und einen Rückruf an die anrufenden Aktivität erhalten. Es ist immer noch in Arbeit.

    
PunK _l_ RuLz 19.07.2016, 10:30
quelle
0

Eine alternative Lösung:

Rendern Sie das Bild auf eine SurfaceTexture. Verwenden Sie dieses SurfaceTexture als OpenGL-Textureingabe "GL_OES_EGL_image_external" in einen OpenGL-Fragment-Shader. Zeichne ein Full-Screen-Quad mit diesem Fragment-Shader auf ein sekundäres SurfaceTexture. Rendern Sie die sekundäre SurfaceTexture in eine TextureView.

Die Arbeit an diesem ersten Teil ist schwierig. Sobald Sie damit fertig sind, können Sie verschiedene Shader auf Bilder anwenden, aber nicht zwischen ihnen wechseln, wie im Bild gezeigt. Um einen reibungslosen Wechsel zwischen Bildern zu ermöglichen, rendern Sie zwei unterschiedliche Fragment-Shader auf dem sekundären SurfaceTexture und verwenden Sie GL_SCISSOR, um den Bildschirm abhängig von einem Offset-Wert in zwei Hälften zu zerlegen.

Der Hauptvorteil dieser Methode ist, dass sie deutlich weniger Speicher benötigt. Die Bitmap kann einmal geladen werden und nachdem sie einmal in die SurfaceTexture gerendert wurde, kann sie verworfen werden.

Ein zweiter Vorteil dieser Methode besteht darin, dass kompliziertere Filter angewendet werden können und dass Sie mit ein wenig zusätzlicher Arbeit auch Videos rendern können.

Wenn Sie daran interessiert sind, eine Implementierung dieser Technik zu sehen (die auch Videofilterung beinhaltet), sehen Sie sich das Kfilter Bibliothek für Foto- und Videofilterung / -verarbeitung.

    
isaac.udy 25.01.2018 10:38
quelle