我在Core Image中编写了一个自定义内核:
outputImage = kernel.apply(extent: extent,
roiCallback: roiCallback,
arguments: [inputImage])!
static let kernel = CIKernel(source:"""
kernel vec4 process(sampler src) {
vec4 pixel = sample(src, samplerTransform(destCoord()));
return pixel;
}
""")!
(这是一个用于说明的简单无操作内核,不是实际内核。)
我想这样做的原因是输入图像中的所有alpha值都是1,所以如果可以跳过它,我也不想浪费内存(和处理时间)在输出图像中存储数百万个1。我的代码对性能很敏感,运行速度不够快,所以我正在寻找优化它的方法。
如果有必要,我的目标是iOS 11及以上版本。
kernel vec3 process(sampler src) {
vec3 pixel = sample(src, samplerTransform(destCoord())).xyz;
return pixel;
}
但我有一个错误:
invalid kernel return type; valid types are 'vec2' and 'vec4'
正如我在回答中指出的那样,vec3不是有效的返回类型,所以这个想法行不通。那是什么呢?