2015-01-06 35 views
0

我想在这里做图像遮罩是我的输出和代码。图像遮罩工作不正常,输出图像是黑白的,应该是彩色的

这是我的掩蔽参考图像(图像大小并不重要),

mask.png,

Masking Image

这是图像在其上即时进行掩蔽,

imggo.png,

Image on which masking is performed (Here the image size doesn't matter)

这是输出

Output

我使用斯威夫特,这里是我的代码...

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

查看变量名称'img'和'maskimg'以及您在那里加载的图像,是不是实际上_swapped_它们?我的意思是'maskimg'应该加载'mask.png',对吗? – DarkDust

+0

更新了令人困惑的变量名称,谢谢。 –

回答

2

您正在使用的参数错误的顺序调用函数maskImage

maskImage功能要像第一次面膜,然后面具。但是当你拨打maskImage(maskRefImg!, maskImage: maskImg!)时,你已经完全交换了。

所以你需要调用maskImage(maskImg!, maskImage: maskRefImg!)


我猜,你想有什么用字倾斜的长方形“走!”并且结果图像应与掩模图像的尺寸完全相同。

当您交换图像时(如必须),将蒙版图像缩放到“Go!”图片大小。但是相反,您可能希望掩码图像位于“Go!”的中心位置图片。所以你需要create a new image与你的“Go!”大小相同。图像并将中心画在该临时图像中。然后,您可以使用临时图像作为应用的实际蒙版。

交换参数时的示例图像也显示“外部”也是绿色的。这可能是因为你的蒙版图像在那里是透明的,并且CGImageMaskCreate将它转换为黑色。但documentation of CGImageCreateWithMask基本上告诉你,创建的图像将混合“去!”图像,以便您的蒙版图像为黑色的部分将具有“Go!”图像可见并且你的蒙版图像是白色的,它将是透明的。因此

的一步一步的指令是:

  • 创建一个新的,临时的形象,是同样大小的作为输入图像(“走!”的形象)。
  • 填充白色。
  • 将您的蒙版图像绘制在临时图像的中心。
  • 使用临时图像调用CGImageMaskCreate来创建实际的蒙版。
  • 拨打CGImageCreateWithMask与“Go!”图像作为第一个参数,以及我们刚创建的实际蒙版作为第二个参数。
  • 结果可能太大(周围有很多透明度)。如果你不希望你裁剪结果图像(例如,到原始蒙版图像的大小;请确保剪切到中心)。

你或许可以跳过CGImageCreateWithMask的一部分,如果你立即在DeviceGray颜色空间中创建临时图像,为CGImageCreateWithMask希望的第二个参数是这个颜色空间中的图像。在这种情况下,我建议你修改你的mask.png,以便它不包含任何透明度:它现在应该是白色,透明。

+0

是的,但是当我交换该订单时,它不会给出所需的输出。 相反,它只是使imggo.png上的mask.png白色框架。 –

+0

请更具体一点:输出结果如何?当您查看[CGImageCreateWithMask']文档(https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGImage/index.html#//apple_ref/c/func/CGImageCreateWithMask)时,您的目前的通话是错误的。你需要交换它(换句话说,'CGCreateImageWithMask'的第一个参数必须是'imggo.png'图片)。 – DarkDust

+0

这是我交换它们时的输出, https://www.dropbox.com/s/do5a0x5rvhysojg/iOS%20Simulator%20Screen%20Shot%2006-Jan-2015%207.36.02%20pm.png?dl=0 –

相关问题