我正在尝试使用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(屏幕截图中的圆圈)。
我不知道我做错了什么。 感谢您的帮助。
答案 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
不兼容的编码设置