基本上我是从网络服务器上下载图像然后将它们缓存到磁盘上,但在我这样做之前我想屏蔽它们。 我正在使用每个似乎都指向的屏蔽代码,可在此处找到: 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实例)。
有什么想法吗?我确实需要屏蔽缓存版本,否则如果我每次必须屏蔽它们,那么在表格视图中显示图像会非常慢。
编辑:所以是的,UIImagePNGRepresentation(img)似乎反转了alpha通道,与写入磁盘的代码没有任何关系,这很明显,但我还是检查了。
答案 0 :(得分:14)
如何绘制到新图像,然后保存?
UIGraphicsBeginImageContext(img.size);
[img drawAtPoint:CGPointZero];
UIImage *newImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[UIImagePNGRepresentation(newImg) writeToFile:cachePath atomically:NO];
(未测试的)
答案 1 :(得分:5)
请参阅CGImage Reference中的CGImageCreateWithMask
中的说明:
生成的图像取决于蒙版参数是图像蒙版还是图像。 如果掩码参数是图像掩码,则图像掩码的源样本充当反α值。也就是说,如果图像掩码中的源样本的值是S,则使用α值(1-S)将图像中的对应区域与目的地混合。例如,如果S为1,则该区域不会绘制,而如果S为0,则该区域将完全绘制。
如果蒙版参数是图像,则它用作用于将图像混合到目标的alpha蒙版。掩码的源样本'充当alpha值。如果掩码中源样本的值为S,则图像中的对应区域与目标字符串混合,其中字母为S.例如,如果S为0,则该区域不会绘制,而如果S为1,该地区已经完全涂漆。
出于某种原因,似乎将图像蒙版视为mask image
,以便在保存时进行遮罩。根据:
要使用UIImagePNGRepresentation
正确保存,有以下几种选择:
答案 2 :(得分:0)
你看到这篇文章了吗?不确定它是否相关但似乎是相似的