0

这是给经验丰富的 iOS 开发者的一个问题。

Core Graphics 函数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 7 的 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 有时肯定不会创建蒙版。

4

0 回答 0