【发布时间】:2010-11-11 02:52:53
【问题描述】:
我有这个代码来屏蔽图像。基本上,我只使用 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 保持原样。没有掩蔽发生。但现在奇怪的是:如果我把它转过来,即使用这个图像作为蒙版,并将蒙版作为彩色图像到蒙版,那么我会得到灰度非常难看的东西(但被蒙版;))。
知道我的代码有什么问题吗?
更新:我刚刚搜索了一个不同的黑白 png 以将其用作掩码。然后这个成功了!但是我自己做的那个不行。所以我假设代码有很大的图像解码问题。我必须将图像“规范化”为特定格式,才能正常工作。
【问题讨论】:
标签: iphone cocoa-touch uikit image-manipulation core-graphics