2016-05-01 2 views
0

Je cherche à ajouter un effet dans mon application (Live Filtering Recorder App) en utilisant le filtre d'image de base. Cet effet doit montrer que les lignes de distorsion apparaissent comme les anciens enregistreurs. Je l'ai essayé en chargeant des cadres d'image et en appliquant en superposition à la sortie de l'image des filtres mais qui crée un décalage dans l'enregistrement. Donc, je ne cherche pas à générer cet effet par CIFILTERS maintenant.Comment créer un effet de distorsion en utilisant CIFilter comme images sous le lien

Tape Recorder like Distortion Lines

Merci.

Répondre

2

Cela ressemble à un travail pour un noyau personnalisé.

Vous pouvez générer un champ de bruit aléatoire avec CIRandomGenerator, puis utiliser un langage de noyau Core Image personnalisé pour le composer sur votre image originale en bandes en utilisant sin pour contrôler l'espacement. Passer le sinus de la position verticale à travers un smoothstep donne un bel effet.

noyau Vous devriez ressembler à:

let kernel = CIColorKernel(string: 
     "kernel vec4 vhsNoise(__sample image, __sample noise, float time, float spacing, float stripeHeight, float backgroundNoise)" + 
      "{" + 
      " vec2 uv = destCoord();" + 

      " float stripe = smoothstep(1.0 - stripeHeight, 1.0, sin((time + uv.y)/spacing)); " + 

      " return image + (noise * noise * stripe) + (noise * backgroundNoise);" + 
     "}" 
     )! 

Je suis en fait écrit un CIFilter à faire ce que vous pouvez find here.

Simon

+1

Le code ci-dessus doit utiliser destCoord() au lieu de samplerCoord (image). La fonction samplerCoord() prend un "sampler" et non un "__sample". –

+0

En effet - erreur d'écolier de ma part. Cela a maintenant changé, même si cela a fonctionné avec 'samplerCoord'. –