我尝试在此处进行图像屏蔽是我的输出和代码。
这是我的掩蔽参考图像(图像大小并不重要),
mask.png,
这是我正在执行屏蔽的图像,
imggo.png,
这是输出。
我正在使用 Swift ,这是我的代码......
override func viewDidLoad() {
super.viewDidLoad()
var maskRefImg : UIImage? = UIImage(named: "mask.png")
var maskImg :UIImage? = UIImage(named: "imggo.png")
var imgView: UIImageView? = UIImageView(frame: CGRectMake(20, 50, 99, 99))
imgView?.image = maskImage(maskRefImg!, maskImage: maskImg!)
self.view.addSubview(imgView!)
}
func maskImage(image:UIImage,maskImage:UIImage)-> UIImage{
var maskRef:CGImageRef = maskImage.CGImage
var mask:CGImageRef = CGImageMaskCreate(CGImageGetWidth(maskRef), CGImageGetHeight(maskRef), CGImageGetBitsPerComponent(maskRef), CGImageGetBitsPerPixel(maskRef), CGImageGetBytesPerRow(maskRef), CGImageGetDataProvider(maskRef), nil, true)
var masked:CGImageRef = CGImageCreateWithMask(image.CGImage, mask)
return UIImage(CGImage: masked)!
}
所以,我怎么能去!图像丰富多彩。? 有人会提供代码。
答案 0 :(得分:2)
您使用错误的参数顺序调用函数maskImage
:
maskImage
函数希望首先屏蔽图像,然后屏蔽。但是当你打电话给maskImage(maskRefImg!, maskImage: maskImg!)
时,你会完全交换它。
因此您需要致电maskImage(maskImg!, maskImage: maskRefImg!)
我猜你想要的是倾斜的矩形,上面带有" Go!"并且结果图像应与掩模图像完全相同。
当您交换图像时(如您所愿),将蒙版图像缩放到" Go!"图片尺寸。但相反,您可能希望遮罩图像居中于" Go!"图片。所以你需要create a new image与你的" Go!"相同的大小。图像并将蒙版绘制在该临时图像的中心。然后使用临时图像作为要应用的实际蒙版。
交换参数时的示例图像也显示"外部"也是绿色的。这可能是因为您的蒙版图像在那里是透明的,CGImageMaskCreate
将其转换为黑色。但是documentation of CGImageCreateWithMask
基本上告诉你创建的图像将混合" Go!"图像,以便你的面具图像是黑色的部分将有" Go!"图像可见,并且您的蒙版图像是白色的,它将是透明的。
因此,逐步说明是:
CGImageMaskCreate
来创建实际掩码。CGImageCreateWithMask
作为第一个参数的图像和我们刚刚创建的第二个参数的实际掩码。如果您立即在DeviceGray颜色空间中创建临时图像,则可以跳过CGImageCreateWithMask
部分,因为CGImageCreateWithMask
希望第二个参数是此颜色空间中的图像。在这种情况下,我建议您修改mask.png
,使其不包含任何透明度:现在它应该是透明的。