我有这个代码来掩盖图像。基本上,我只使用 PNG 图像。所以我有一个 24 位颜色 (PNG-24) 的 300x400 PNG 图像。我不确定它是否也有 alpha 通道。但它没有透明度。
然后是没有alpha通道的PNG-8bit的图像掩码。它只是黑色,灰度和白色。
我将两个图像都创建为 UIImage。将它们放入 UIImageView 时,两者都正确显示。
然后我使用以下代码创建一个 UIImage ,其中包含屏蔽操作的结果:
+ (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, false);
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
return [UIImage imageWithCGImage:masked];
}
这就是我所做的:
UIImage *image = [UIImage imageNamed:@"coloredImagePNG24.png"];
UIImage *maskImage = [UIImage imageNamed:@"theMaskPNG8_Grayscale_NoAlpha.png"];
UIImage *maskedImage = [MyGraphicUtils maskImage:image withMask:maskImage];
UIImageView *testImageView = [[UIImageView alloc] initWithImage:maskedImage];
testImageView.backgroundColor = [UIColor clearColor];
testImageView.opaque = NO;
毕竟,coloredImagePNG24.png 保持原样。没有掩蔽发生。但现在奇怪的是:如果我把它转过来,即使用这个图像作为蒙版,并将蒙版作为彩色图像到蒙版,那么我会得到一些非常难看的灰度(但被蒙版;))。
知道我的代码有什么问题吗?
更新:我只是在谷歌上搜索了一个不同的 b/w png 以将其用作掩码。然后这个成功了!但是我自己做的那个不行。所以我假设代码有很大的图像解码问题。我必须将图像“标准化”为特定格式,以便它工作。