以PNG文件的forms将遮罩的图像写入磁盘

基本上我是从networking服务器下载图像,然后caching到磁盘,但在我之前,我想掩盖它们。 我使用的掩码每个人似乎都指向哪里可以在这里find: http : //iosdevelopertips.com/cocoa/how-to-mask-an-image.html

然而,发生的事情是,图像显示正常,但是写入磁盘的版本

UIImage *img = [self maskImage:[UIImage imageWithData:data] withMask:self.imageMask]; [UIImagePNGRepresentation(img) writeToFile:cachePath atomically:NO]; 

与稍后显示的相比,它的alpha通道是倒置的(在这里使用相同的UIImage实例)。

有任何想法吗? 我确实需要caching的版本才能被屏蔽,否则在表格视图中显示图像会非常缓慢,如果我必须每次屏蔽它们。

编辑:所以是的,UIImagePNGRepresentation(img)似乎颠倒了alpha通道,与写入磁盘的代码没有任何关系,这是相当明显的,但我仍然检查。

请参阅CGImage参考中的CGImageCreateWithMask中的说明:

得到的图像取决于掩码参数是图像掩码还是图像。 如果掩码参数是图像掩码,则图像掩码的源样本将用作逆alpha值。 也就是说,如果图像蒙板中的源样本的值是S,则使用(1-S)的阿尔法值将图像中的对应区域与目的地混合。 例如,如果S是1,则该区域不被绘制,而如果S是0,则该区域被完全绘制。

如果mask参数是图像,则它用作将图像混合到目的地的alpha蒙版。 掩码的源样本“作为一个alpha值。 如果掩码中的源样本的值是S,则图像中的对应区域与具有S的alpha的目的地混合。例如,如果S是0,则该区域不被绘制,而如果S是1,该地区是完全画。

这似乎是由于某种原因,图像蒙板被视为mask image来掩盖,同时保存。 根据:

要正确保存与UIImagePNGRepresentation ,有几个select:

  1. 使用图像蒙版的反转版本。
  2. 使用“蒙版图像”而不是“图像蒙版”。
  3. 渲染到位图上下文,然后保存,就像提到的epatel。

如何绘制一个新的图像,然后保存?

 UIGraphicsBeginImageContext(img.size); [img drawAtPoint:CGPointZero]; UIImage *newImg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [UIImagePNGRepresentation(newImg) writeToFile:cachePath atomically:NO]; 

(另)

你看到这个post了吗? 不知道是否相关,但似乎是相似的

任何想法为什么这个图像掩码不起作用?