我有一段用于图像遮罩的代码。基本上,我只使用PNG图像。所以我有一个300x400的PNG图像,具有24位色彩(PNG-24)。我不确定它是否还有alpha通道。但其中没有透明度。
然后,有一个图像遮罩,它是没有alpha通道的PNG-8位图像。它只有黑色,灰度和白色。
我将它们都创建为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完全保持不变。没有遮罩发生。但是现在奇怪的事情是:如果我反过来使用这个图像作为遮罩,并将遮罩用作颜色图片,则会以灰度形式得到一些非常丑陋的东西(但被遮蔽了)。
有任何关于我的代码问题的想法吗?
更新:我刚刚搜索了另一个黑白png文件,以便将其用作遮罩。然后这一个起作用了!但是我自己制作的那个却不行。所以我认为代码存在很大的图像解码问题。我需要"标准化"图像到特定格式,这样才能正常工作。