以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和蒙面的图像
- http://lists.apple.com/archives/quartz-dev/2010/Sep/msg00038.html
要正确保存与UIImagePNGRepresentation
,有几个select:
- 使用图像蒙版的反转版本。
- 使用“蒙版图像”而不是“图像蒙版”。
- 渲染到位图上下文,然后保存,就像提到的epatel。
如何绘制一个新的图像,然后保存?
UIGraphicsBeginImageContext(img.size); [img drawAtPoint:CGPointZero]; UIImage *newImg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [UIImagePNGRepresentation(newImg) writeToFile:cachePath atomically:NO];
(另)
你看到这个post了吗? 不知道是否相关,但似乎是相似的
任何想法为什么这个图像掩码不起作用?