Swift CGImage.masking(_ :)如何使用“蒙版图像”代替“图像蒙版”

时间:2019-11-17 10:52:31

标签: ios swift cgimage image-masking

我正在使用简单的扩展名,该扩展名将UIImage屏蔽为另一个UIImage

func masked(by mask: UIImage) -> UIImage {
        guard let maskRef = mask.cgImage,
            let selfRef = cgImage,
            let dataProvider = maskRef.dataProvider,
            let mask = CGImage(
                maskWidth: maskRef.width,
                height: maskRef.height,
                bitsPerComponent: maskRef.bitsPerComponent,
                bitsPerPixel: maskRef.bitsPerPixel,
                bytesPerRow: maskRef.bytesPerRow,
                provider: dataProvider,
                decode: nil,
                shouldInterpolate: false),
            let masked = selfRef.masking(mask) else {
                    fatalError("couldnt create mask!")
        }
        let maskedImage = UIImage(cgImage: masked)
        return maskedImage
    }

来自Apple文档:

  

生成的图像取决于mask参数是图像遮罩还是图像。如果mask参数是图像蒙版,则该图像蒙版的源样本将用作反alpha值。即,如果图像掩模中的源样本的值为S,则使用(1-S)的alpha值将图像中的对应区域与目标混合。例如,如果S为1,则不绘制区域,而如果S为0,则完整绘制区域。   如果mask参数是图像,则它将用作将图像混合到目标上的Alpha蒙版。 mask'的源样本充当Alpha值。如果遮罩中的源样本的值为S,则图像中的对应区域将以α为S与目标混合。例如,如果S为0,则不绘制该区域,而如果S为1,该区域已完全粉刷。

如何创建图像而不是蒙版图像?没有这个,我必须先用CIFilter反转我的遮罩,然后得到效果良好的图像。我在任何地方都找不到答案。仅使用maskRef即可通过遮罩创建nil。我正在使用没有Alpha通道的png蒙版。

0 个答案:

没有答案