使用 50% alpha 应用 CIHardLightBlendMode

问题描述

我正在将 CIImage 与有斑点的灰色(类似胶片颗粒)文件混合:

    var hardLightBlendFilter = CIFilter(name: "CIHardLightBlendMode")!
    var inputimage: CIImage = ...
    let grainImage = CIImage(cgImage: (UIImage(named: "Grain")?.cgImage)!)

    hardLightBlendFilter.setValue(inputimage,forKey: kCIInputBackgroundImageKey)
    hardLightBlendFilter.setValue(grainImage,forKey: kCIInputimageKey)

我如何才能仅应用 50% 的效果

我试图找到一种方法来设置 grainImage 的 alpha 以查看其效果。但是还没搞清楚。

有什么想法吗?

解决方法

这不是很直观,但您可以使用 CIColorMatrix 过滤器来操作图像的 alpha 值:

let colorMatrixFilter = CIFilter(name: "CIColorMatrix")!
colorMatrixFilter.setValue(grainImage,forKey: kCIInputImageKey)
colorMatrixFilter.setValue(CIVector(x: 0.0,y: 0.0,z: 0.0,w: 0.5),forKey: "inputAVector") // where 0.5 is the factor applied to alpha
let transparentGainImage = colorMatrixFilter.outputImage!