0

很久以前,我的 iPhone 应用程序中就有一段代码试图掩盖一些 JPEG 图像的白色背景。今天,这条消息在 iPhone 上仍然有效,但在 Apple Watch 上没有任何掩饰。代码在预期的成功(非NULL)路径上运行,但不执行屏蔽。即使我将maskingColors数组更改为每个组件的范围,当显示在(with )0.0, 255.0中时,也不会执行屏蔽(iPhone 上的相同更改完全屏蔽了图像)。WKInterfaceImagesetImage:

带有存储在资产目录中的 alpha 通道的 PNG 图像似乎在 Apple Watch 上以WKInterfaceImage.

CGImageCreateWithMaskingColorsApple Watch 不安全?

- (UIImage *)imageWithBackgroundRemovedWithImageData:(NSData *)imageData
{
    CGImageRef originalImage = [UIImage imageWithData:imageData].CGImage;

    /* Only attempt for RGB images */
    if (CGColorSpaceGetModel(CGImageGetColorSpace(originalImage)) != kCGColorSpaceModelRGB)
        return ([UIImage imageWithData:imageData]);

    /* Mask 10 shades of "white" */
    static const CGFloat maskingColors[] = {245.0, 255.0, 245.0, 255.0, 245.0, 255.0};
    CGImageRef transparentImageRef = CGImageCreateWithMaskingColors(originalImage, maskingColors);
    if (transparentImageRef == NULL)
        return ([UIImage imageWithData:imageData]);

    UIImage *transparentImage = [UIImage imageWithCGImage:transparentImageRef];
    CGImageRelease(transparentImageRef);
    return (transparentImage);
}
4

1 回答 1

1

这似乎是自 iOS 7 以来就存在的问题。有关更多详细信息,请参阅此帖子:CGImageCreateWithMaskingColors 不适用于 iOS7

使用该逻辑,我已按如下方式修改了您的代码以产生预期的结果:

UIGraphicsBeginImageContextWithOptions(transparentImage.size, NO, 1.0);
[transparentImage drawInRect:CGRectMake(0, 0, transparentImage.size.width, transparentImage.size.height)];
UIImage *anotherRendition = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return (anotherRendition);
于 2015-04-29T18:09:30.003 回答