我正在尝试创建自定义 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 + shift, maxX + shift) 范围内的像素移动到 (minX, maxX)
关于objective-c - 自定义 CIKernel 移动像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273956/