核心图像过滤器返回空图像

时间:2016-04-09 07:01:06

标签: ios swift2 core-image cifilter

我正在尝试为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开发核心图像过滤器所以我希望它能够正常工作,看起来对我来说是正确的。

1 个答案:

答案 0 :(得分:0)

显然input是保留关键字,替换为:

kernel vec2 mirrorX(float imageWidth) {
    vec2 p = destCoord();
    return vec2(imageWidth - p.x, p.y);
}

工作得很好!