我正在尝试为CIFilter构建一个warp内核,但是我得到的图像是空的,例如它是一个正确尺寸的图像,但只有一种颜色。
我的过滤器如下所示:
class MyWarpFilter: CIFilter {
var inputImage: CIImage?
let kernel = CIWarpKernel(string: getKernelString("mirrorX"))
override var outputImage: CIImage? {
guard let inputImage = inputImage, kernel = kernel else { return nil }
let extend = inputImage.extent
let imageWidth = inputImage.extent.size.width
let arguments = [imageWidth]
return kernel.applyWithExtent(
extend,
roiCallback: {
(index, rect) in
return rect
},
inputImage: inputImage,
arguments: arguments as [AnyObject])
}
}
我的内核看起来像这样:
kernel vec2 mirrorX(float imageWidth) {
vec2 input = destCoord();
return vec2(imageWidth - input.x, input.y);
}
如果我用return destCoord();
替换内核的主体,我会按预期恢复原始图像。
内核来自2014年WWDC演示文稿512:为iOS开发核心图像过滤器所以我希望它能够正常工作,看起来对我来说是正确的。
答案 0 :(得分:0)
显然input
是保留关键字,替换为:
kernel vec2 mirrorX(float imageWidth) {
vec2 p = destCoord();
return vec2(imageWidth - p.x, p.y);
}
工作得很好!