为什么iOS中的图像蒙版是如此低分辨率(块状)?

时间:2014-03-14 07:08:10

标签: ios iphone uiimage mask cgimage

我正在尝试使用UIImage将图层蒙版应用于CGImageCreateWithMask,但图像上的蒙版的分辨率非常低,看起来很块。

这是我正在尝试的代码(link to github),但我不知道出了什么问题。

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

CGImageRef maskRef = maskImage.CGImage;

CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                    CGImageGetHeight(maskRef),
                                    CGImageGetBitsPerComponent(maskRef),
                                    CGImageGetBitsPerPixel(maskRef),
                                    CGImageGetBytesPerRow(maskRef),
                                    CGImageGetDataProvider(maskRef), NULL, true);

CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
return [UIImage imageWithCGImage:masked];   
}

这就是它最终的样子。 我的面具是一个带有alpha通道的透明PNG(屏幕截图中的圆圈)。

mskr fail

我不知道我做错了什么。 感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我猜测你的面具正在调整大小以适应传递的图像,从而适应锯齿状的边缘。

来自CGImageCreateWithMask

的文档

If the mask is not the same size as the image specified by the image parameter, then Quartz scales the mask to fit the image

如果不是这种情况,请检查图像和蒙版的比例属性。

答案 1 :(得分:0)

我从未弄清楚这一点。 iOS运行时如何解释我正在使用的alpha-PNG可能有些不对劲。将掩码保存为JPG后,一切都开始工作,没有任何代码更改。

我觉得这很奇怪,因为完全相同的掩码文件同时适用于Android和WindowsPhone。

我认为我的PNG文件应该有效(as documented)但是必须存在与CoreGraphics不兼容的编码设置