我正在使用简单的扩展名,该扩展名将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蒙版。