如何将CISampler传递给基于金属的CIColorKernel?

时间:2019-01-31 12:11:02

标签: ios metal cifilter

我正在尝试制作基于金属的CIFilter,因为Apple似乎更喜欢您使用它,但是我遇到了问题,因为我需要合并多个大小可能不同的图像。这意味着我必须使用归一化的坐标和采样器来“拉伸”各种输入图像。

这是一个示例内核:

extern "C" { namespace coreimage {
    float4 stretchKernel(
                         sampler image
                         ) {
        return image.sample(image.coord());
    }
}}

...,我这样实现:

    let arguments: [Any] = [
        CISampler(image: startingImage, options: samplerOptions)
    ]

    return kernel.apply(extent: startingImage.extent, arguments: arguments)

现在有点奇怪了。如果运行此命令,则会出现以下错误:

Argument info count 1 for function composition does not match argument count 4 in declaration of function

就好像采样器在内核函数中被当作四个独立的参数一样,但是我只能将它们作为一个参数传递。我在使用正确的类将映像传递到内核吗?内核声明有问题吗?也许我可以使用其他方法来获取各种图像的标准化坐标和采样器吗?

1 个答案:

答案 0 :(得分:2)

好吧,我不知道为什么无法从文档中找到答案,但是原因似乎是:类型与filter不兼容。我敢说有一个很好的理由,但是我不知道为什么没有更明确地说明它。解决方案是改用普通的CIColorKernel