我已经写在核心形象定制的内核:如何告诉CIKernel产生没有alpha通道的输出图像?
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;
}
""")!
(这是为了说明一个简单的无操作的内核,而不是实际的一个。)
输入是BGRA,但我想输出CIImage是BGR(或RGB或任何其他顺序)。这可能吗?
我想这样做的原因是输入图像中的所有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'
作为II在回答中指出,VEC3不是有效的返回类型,所以这个想法不起作用。那么,什么呢?
感谢。我又经历了一遍,它说图像总是在RGB色彩空间中,所以YCbCr不是一种选择,但我不知道是否可以使用RGB,没有Alpha通道。 –