2016-05-01 6 views
0

コア画像フィルタを使用してアプリケーション(ライブフィルタリングレコーダーアプリ)にエフェクトを追加したいと考えています。このエフェクトは、古い時間レコーダーのように見える歪み線を表示する必要があります。私は、画像フレームをロードし、フィルタ画像の出力にオーバーレイとして適用することでそれを試みましたが、それは記録に遅れを作ります。だから私は今CIFILTERSによってこの効果を生成するために探していません。リンクの画像としてCIFilterを使用してディストーションエフェクトを作成する方法

Tape Recorder like Distortion Lines

感謝。

答えて

2

これはカスタムカーネルの仕事のようです。

CIRandomGeneratorでランダムノイズフィールドを生成してから、独自のCore Image Kernel Languageを使用して、元の画像に縞模様に合成して、間隔を制御するsinを使用できます。垂直位置の正弦波をsmoothstepに通すと効果があります。私は実際にこれを行うにはCIFilterを書いた

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);" + 
     "}" 
     )! 

たあなたはfind hereをすることができます:

あなたのカーネルは次のようになります。

Simon

+1

上記のコードでは、samplerCoord(image)ではなくdestCoord()を使用してください。 samplerCoord()関数は、 "サンプラー"ではなく "サンプラー"を取ります。 –

+0

本当に私の就学生のエラーです。これは変更されましたが、 'samplerCoord'でもうまくいきました。 –

関連する問題