我有一个带有alpha通道的300x400px PNG-24。它大约有140kb。我想掩盖其中的一些部分,所以我创建了另一张300x400的PNG-24图像,但只有黑色,灰色和白色,没有alpha通道。
奇怪的是:在蒙版是黑色的地方,图像只是保持原始。没有透明度。但是在蒙版是白色的地方,图像变黑了,只是变黑了。没有透明度。
它部分适用于非常小的图像,如50x50px。你知道这个函数可能出了什么问题吗?
+ (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 theImage = image.CGImage;
CGImageRef masked = CGImageCreateWithMask(theImage, mask);
return [UIImage imageWithCGImage:masked];
}我的背景是橙色的,所以这个颜色应该是透明的。保存图像的透明度设置为clearColor / UIImageView和opaque=NO。
发布于 2009-07-16 08:53:09
我猜你的代码是from here。下面是这样的评论:
我已经改进了代码,这样它就可以正确地遮罩没有alpha通道的图像。
因此,如果它对您不起作用,可能您的图像没有alpha通道。
发布于 2013-09-09 22:29:55
当心--代码会泄露!直到在循环中运行此方法,我才注意到这一点。请确保在返回图片前调用CGImageRelease(mask)和CGImageRelease(masked)。
- (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);
UIImage *img = [UIImage imageWithCGImage:masked];
//otherwise we will leak
CGImageRelease(mask);
CGImageRelease(masked);
return img;
}https://stackoverflow.com/questions/1136195
复制相似问题