objective-c - 自定义 CIKernel 移动像素

标签 objective-c macos kernel cifilter

我正在尝试创建自定义 cifilter(如 adobe 的扭曲过滤器)。如何仅将几个像素(位于 ROI 中)移动到内核语言中的其他位置?也许有人可以建议我一些有关它的信息?我已阅读有关创建自定义 cifilter 的所有苹果文档,但尚未找到该类型过滤器的内核部分的任何类似示例。有一些 CIFilter 可以执行类似的操作(例如 CITwirlDistortion、CIBumpDistortion)。也许我可以在某个地方找到它们的内核?

最佳答案

您必须反向执行此操作。不要说我想将这些输入像素放在输出中的这个位置,您必须回答这个输出像素的输入中的像素在哪里的问题。

看看这个内核:

kernel vec4 coreImageKernel(sampler image, float minX, float maxX, float shift)
{
    vec2 coord = samplerCoord( image );

    float x = coord.x;
    float inRange = compare( minX - x, compare( x - maxX, 1., 0. ), 0. );
    coord.x = coord.x + inRange * shift;
    return sample( image, coord );
}

它将 minX 和 maxX 之间的垂直条纹替换为向右移动像素的图像内容。使用 minX = 100、maxX = 300 和 shift = 500 的内核可得到左下角的图像。原件位于右上角。

minX = 100, maxX = 300 and shift = 500

所以效果就是将 (minX + shift, maxX + shift) 范围内的像素移动到 (minX, maxX)

关于objective-c - 自定义 CIKernel 移动像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273956/

相关文章:

swift - 是否可以隐藏 "show package contents"中的某些文件?

linux-kernel - 有没有办法让uboot知道内核启动状态

Linux:从 CIFS 读取的文件是否会缓存在内存中?

ios - imageview 图像填充适合模式

ios - InApp Purchase 产品列表不会在 iPhone 应用程序中加载

ios - 自定义类的 Objective-C 多重嵌套 initWith

使用KGDB远程调试Linux内核: GDB does not recognize functions?

python - C 或 Python 中的 NSScanner 等效项

css - Google 字体无法在 Windows 浏览器中加载,但会在 Mac 浏览器中加载

macos - 获取 Webview 的滚动位置和范围