这是一位非常有经验的iOS开发人员的问题。
核心图形功能CGImageMaskCreate从灰度图像创建CG图像蒙版。我使用JPG导出为灰度。我仔细检查过:在Photoshop中打开时,转到图像>模式>它说“灰度”。
以下方法是UIImage类别的一部分。它需要一个掩码UIImage(只是一个灰度JPG),它的目标是掩盖自己(UIImage是一张JPG照片),因此生成的图像具有透明度。
适用于所有4英寸设备和iPad 4.但CGImageMaskCreate的输出在任何具有iOS 6或iOS 7的3.5英寸设备上都是死的。也就是说,生成的图像只有100%透明。同样在iPhone模拟器3.5英寸(Xcode 5)。我不知道为什么。有人说这是iOS 7的问题,但它适用于iOS 5的iPhone 5和5S。我也尝试过PNG-8灰度,结果相同。
是否有来自Apple的已知TN或该错误的解决方法?
- (UIImage*)maskedImageWithMask:(UIImage *)maskImage {
CGImageRef imageRef = self.CGImage;
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, NO);
CGImageRef maskedImageRef = CGImageCreateWithMask(imageRef, mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef scale:self.scale orientation:self.imageOrientation];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
return maskedImage;
}
编辑:
在3.5英寸的iPhone模拟器和设备CGImageIsMask(mask)上返回NO。在4英寸模拟器和设备上,它返回YES。所以CGImageMaskCreate有时肯定不会创建掩码。