【发布时间】:2015-08-19 16:08:03
【问题描述】:
我试图通过以编程方式创建CGImageRef mask 并通过CGImageCreateWithMask() 应用它来屏蔽UIImage。这是我的方法:
- (UIImage *)imageByMaskingHalfImage:(UIImage *)image {
UIGraphicsBeginImageContextWithOptions((CGSize){image.size.width, image.size.height}, NO, image.scale);
[[UIColor blackColor] setFill];
UIRectFill(CGRectMake(0, 0, image.size.width / 2, image.size.height));
[[UIColor whiteColor] setFill];
UIRectFill(CGRectMake(image.size.width / 2, 0, image.size.width / 2, image.size.height));
UIImage *maskImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRef maskImageRef = CGImageMaskCreate(CGImageGetWidth(maskImage.CGImage),
CGImageGetHeight(maskImage.CGImage),
CGImageGetBitsPerComponent(maskImage.CGImage),
CGImageGetBitsPerPixel(maskImage.CGImage),
CGImageGetBytesPerRow(maskImage.CGImage),
CGImageGetDataProvider(maskImage.CGImage),
NULL,
NO);
CGImageRef imageRef = CGImageCreateWithMask(image.CGImage, maskImageRef);
image = [UIImage imageWithCGImage:imageRef scale:image.scale orientation:image.imageOrientation];
CGImageRelease(maskImageRef);
CGImageRelease(imageRef);
return image;
}
预览maskImage 时,我可以看到它被正确渲染:图像的一半是黑色的,一半是白色的。但是,生成的蒙版image 保持不变,整个图像都是可见的。
我已阅读文档,但找不到问题所在。我的代码中一定有一些愚蠢的错误,或者我误解了什么。
【问题讨论】:
标签: objective-c uiimage core-graphics quartz-2d