如何让CGImageMaskCreate在3.5英寸设备上运行?

时间:2014-02-12 00:19:03

标签: ios iphone uiimage core-graphics cgimagemaskcreate

这是一位非常有经验的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有时肯定不会创建掩码。

0 个答案:

没有答案