在 Metal Core Image Kernel 中指定采样方法

Specify sampling method in Metal Core Image Kernel

在 Metal 中,我们可以像这样创建采样器

      constexpr sampler s(coord::normalized, address::clamp_to_edge, filter::linear);

然后我们可以使用这个采样器对任何纹理进行采样。

我想知道 Metal Core Image Kernels 中是否有类似的东西。

是的,有!您可以使用可以传递给内核的 CISampler 而不是 CIImage:

let sampler = CISampler(image: image, options: [
    kCISamplerWrapMode: kCISamplerWrapClamp,
    kCISamplerFilterMode: kCISamplerFilterLinear
])

您还可以在 options 中设置 kCISamplerAffineMatrix 来定义采样时应用于坐标的变换(我认为 normalized 是默认行为)。

或者,您可以在 CIImage 上使用这些便捷助手来设置环绕和过滤模式:

// for linear & clamp-to-edge
let newImage = image.samplingLinear().clampedToExtent()
// for nearest & clamp-to-black (actually transparent, not black)
let newImage = image.samplingNearest().cropped(to: aRect)

使用这些方法,您还可以强制 built-in 过滤器使用相应的模式。