Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将CISampler传递给金属基CIColorKernel?_Ios_Metal_Cifilter - Fatal编程技术网

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

Ios 如何将CISampler传递给金属基CIColorKernel?,ios,metal,cifilter,Ios,Metal,Cifilter,我正在尝试制作一个基于金属的CIFilter,因为苹果似乎更喜欢你使用它,但我遇到了一些问题,因为我需要合并多个不同大小的图像。这意味着我必须使用标准化坐标和采样器来“拉伸”各种输入图像 下面是一个内核示例: extern "C" { namespace coreimage { float4 stretchKernel( sampler image ) { return i

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

下面是一个内核示例:

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)
现在有点奇怪了。如果我运行此程序,则会出现以下错误:

函数组合的参数信息计数1与函数声明中的参数计数4不匹配


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

嗯,我不知道为什么我无法从文档中找到这一点,但原因似乎是
过滤器类型与
CIColorKernel
不兼容。我敢说这是一个很好的理由,但我不知道为什么没有更明确地表达出来。解决方案是使用普通的
CIKernel

是的,
CIColorKernels
是专门用于处理单个样本(即像素),而不是整个采样器(即纹理)的内核。