【问题标题】:Custom CIKernel move pixels自定义 CIKernel 移动像素
【发布时间】:2013-04-22 20:13:03
【问题描述】:
我正在尝试创建自定义 cifilter(如 adobe 的 warp 过滤器)。如何仅将几个像素(在 ROI 中)移动到内核语言中的其他位置?也许有人可以建议我一些关于它的信息?我已经阅读了所有关于创建自定义 cifilter 的苹果文档,但没有找到任何类似的该类型过滤器内核部分的示例。有一些 CIFilter 做类似的事情(如 CITwirlDistortion、CIBumpDistortion)。也许在某个地方我可以找到他们的内核?
【问题讨论】:
标签:
objective-c
macos
kernel
cifilter
【解决方案1】:
你必须反过来做。不要说我想将这些输入像素放在输出中的这个位置,您必须回答这个输出像素的输入中的像素在哪里的问题。
看看这个内核:
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)