我大量借用(标准)代码,将灰度 UIImage 蒙版应用于 UIImage。
- (void) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef imageRef = image.CGImage; // main UIImage
CGImageRef maskRef = maskImage.CGImage; // grayscale UIImage mask
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask(imageRef, mask);
maskedImage = [UIImage imageWithCGImage:masked];
CGImageRelease(mask);
CGImageRelease(masked);
imageView.image = maskedImage;
}
然后我将 imageView.image 保存到文件中。该代码在 iOS 6 和 6.1 中就像一个魅力;保存的图像包含应用了蒙版的主 UIImage。但是,我注意到此代码在 iOS 7 (iPhone) 中的执行方式不同。在 iOS 7 中,保存的图像仅包含未应用蒙版的主 UIImage。我不确定问题出在 CGImageCreateWithMask() 方法还是其他地方。
任何见解将不胜感激。非常感谢你。