我有这个代码来掩盖图像.基本上,我只使用PNG图像.所以我有一个300x400的PNG图像,24位色(PNG-24).我不确定它是否也有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];
}
Run Code Online (Sandbox Code Playgroud)
这就是我用它做的事情:
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;
Run Code Online (Sandbox Code Playgroud)
毕竟,coloredImagePNG24.png保持原样完好无损.没有掩盖正在发生.但现在奇怪的是:如果我把它转过来,即使用这个图像作为蒙版,并将蒙版作为彩色图像到蒙版,那么我会得到灰度非常难看的东西(但是蒙版;)).
知道我的代码有什么问题吗?
更新:我只是用谷歌搜索一个不同的黑白png用它作为掩码.然后这个工作了!但我自己制作的那个不起作用.所以我假设代码有很大的图像解码问题.我必须将图像"规范化"为特定格式,以便它可以工作.