我正在尝试创建自定义的cifilter (就像adobe的warp filter)。如何在内核语言中只将几个像素(在ROI中)移动到其他位置?也许有人可以向我推荐一些相关信息?我已经阅读了所有关于创建自定义cifilter的苹果文档,但没有找到任何类似的该类型过滤器的内核部分的示例。有一些CIFilters可以做类似的事情(比如CITwirlDistortion、CIBumpDistortion)。也许有什么地方我可以找到他们的内核?
发布于 2013-05-04 18:51:56
你必须反其道而行之。而不是说我想把这些输入像素放在输出中的这个位置,你必须回答这个问题,这个输出像素的输入像素在哪里。
看看这个内核:
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)
https://stackoverflow.com/questions/16273956
复制相似问题