2017-04-07 4 views
20

Je travaille sur un projet de filtre d'image personnalisé. Et je suis tombé sur une tâche difficile, dans laquelle je suis censé appliquer des filtres déformés comme on peut le voir dans Funny face effect app. Je veux développer les 3 premiers filtres disponibles dans Funny Face Effects. Donc, pour mettre en œuvre un tel effet, j'ai commencé à utiliser GPUImageView GPUImage et dans ce cas, il utilise seekbar pour déformer l'image à partir du centre. J'ai atteint déformation de de cela. Mais y a-t-il un moyen de mettre en œuvre un filtre de traînée, où je peux déformer mon image par un geste de glisser?Comment mettre en œuvre Drag Distorsion Image filtre dans android?

Nous avons essayé de rechercher d'autres classes tierces autres que GPUImage. Mais nous n'avons pas pu trouver de choses utiles.

Nos requêtes sont comme suit: -

1) Est-il possible d'appliquer le filtre de glisser à l'aide geste de déplacement? (Tout extrait de code ou référence appréciable)

2) Toute autre classe tierce autre que le GPU qui peut nous aider à obtenir les résultats ci-dessus.

Merci d'avance!

enter image description here

+0

Veuillez également publier des extraits de code en expliquant ce que vous avez déjà essayé ou quelles bibliothèques vous avez rencontrées. – DroidDev

+0

@DroidDev, j'ai essayé avec https://github.com/CyberAgent/android-gpuimage qui a des filtres d'effet. Cela fonctionne bien quand un seul filtre est appliqué, mais quand j'essaie d'appliquer plusieurs filtres, ça va complètement mal. L'image est déformée à partir de points aléatoires. – Maddy

+0

https://github.com/ragnraok/android-image-filter. Vous pouvez essayer la fonction de flou de mouvement – Rndomcoder

Répondre

5

Une façon d'y parvenir est d'utiliser une texture supplémentaire pour indiquer au fragment shader la déformation à appliquer. Vous pouvez modifier ce contenu de texture à partir de l'application lorsque l'utilisateur touche l'image pour appliquer des déformations.

GPUImageBulgeDistortionFilter étend GPUImageFilter qui est conçu pour utiliser une seule texture.

Vous devrez dupliquer la liaison de texture (glBindTexture) et l'assignation au fragment shader (glUniform1i) dans GPUImageFilter en utilisant 1 pour la nouvelle texture (au lieu de 0). Vous devrez également dupliquer glGetUniformLocation et utiliser un autre nom au lieu de inputImageTexture, par exemple inputImageTexture2.

Modifier le fragment shader à GPUImageBulgeDistortionFilter ou créer une nouvelle classe dérivée de GPUImageBulgeDistortionFilter ajouter « sampler2D inputImageTexture2 uniforme; \ n » +

Enfin ajouter du code à utiliser inputImageTexture2 texels pour déformer les données à inputImageTexture dans le même fragment shader .