【发布时间】:2018-11-26 19:17:54
【问题描述】:
我正在尝试编写一个 CIKernel,它对图像中所有像素的值求和——实际上是对两个 CIImages 之间的绝对差求和,就像绝对差之和一样。
文档告诉我,除非可以在编译时测试谓词,否则 for 循环是非法的。图像的范围不能,所以我不确定内核如何迭代样本并累积一个值。或者这甚至可能吗?我需要在内核之外做最后的求和吗?
kernel vec4 coreImageKernel(sampler minuend, sampler subtrahend) {
vec4 retval = {0,0,0,0};
if destCoord().x == 0 && destCoord().y == 0 {
int i,j;
for(i = 0; i < samplerExtent(minuend).w ; i++) {
for(j = 0; j < samplerExtent(minuend).h ; j++) {
vec2 dest = {i,j};
vec4 minSample = sample(minuend , samplerTransform(minuend,dest));
vec4 subSample = sample(subtrahend, samplerTransform(subtrahend,dest));
vec4 sampleDiff = abs(minSample - subSample);
retval += sampleDiff;
}
}
}
return retval;
}
【问题讨论】:
标签: metal core-image