Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用CIFilter作为链接下的图像创建失真效果_Ios_Objective C_Iphone_Core Image_Cifilter - Fatal编程技术网

Ios 如何使用CIFilter作为链接下的图像创建失真效果

Ios 如何使用CIFilter作为链接下的图像创建失真效果,ios,objective-c,iphone,core-image,cifilter,Ios,Objective C,Iphone,Core Image,Cifilter,我正在寻找添加到我的应用程序(实时过滤录像机应用程序)使用核心图像过滤器的效果。这种效果需要显示失真线,就像旧的录像机一样。我试着加载图像帧并将其作为覆盖应用到过滤器图像的输出,但这会在录制过程中造成延迟。所以我现在不想通过CIFILTERS产生这种效果 谢谢。这看起来像是定制内核的作业 您可以使用CIRandomGenerator生成随机噪声场,然后使用一些自定义核心图像内核语言,使用sin控制间距,在原始图像的条纹上合成随机噪声场。通过平滑步骤传递垂直位置的正弦会产生很好的效果 您的内核应

我正在寻找添加到我的应用程序(实时过滤录像机应用程序)使用核心图像过滤器的效果。这种效果需要显示失真线,就像旧的录像机一样。我试着加载图像帧并将其作为覆盖应用到过滤器图像的输出,但这会在录制过程中造成延迟。所以我现在不想通过CIFILTERS产生这种效果


谢谢。

这看起来像是定制内核的作业

您可以使用
CIRandomGenerator
生成随机噪声场,然后使用一些自定义核心图像内核语言,使用
sin
控制间距,在原始图像的条纹上合成随机噪声场。通过
平滑步骤
传递垂直位置的正弦会产生很好的效果

您的内核应该如下所示:

    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);" +
        "}"
        )!
实际上,我已经编写了一个
CIFilter
来实现这一点


Simon

这看起来像是定制内核的作业

您可以使用
CIRandomGenerator
生成随机噪声场,然后使用一些自定义核心图像内核语言,使用
sin
控制间距,在原始图像的条纹上合成随机噪声场。通过
平滑步骤
传递垂直位置的正弦会产生很好的效果

您的内核应该如下所示:

    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);" +
        "}"
        )!
实际上,我已经编写了一个
CIFilter
来实现这一点


Simon

上面的代码应该使用destCoord()而不是samplerCoord(图像)。samplerCoord()函数接受的是“sampler”而不是“__sample”。事实上,我犯了一个小学生错误。这一点现在已经改变了,尽管它确实与
samplerCoord
一起工作。上面的代码应该使用destCoord()而不是samplerCoord(图像)。samplerCoord()函数接受的是“sampler”而不是“__sample”。事实上,我犯了一个小学生错误。这一点现在已经改变了,尽管它确实与
samplerCoord
一起工作。