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