CGImageCreateWithMaskingColors 不会在 WKInterfaceImage 的 Apple Watch 上遮罩
CGImageCreateWithMaskingColors Does Not Mask on Apple Watch in WKInterfaceImage
我的 iPhone 应用程序中早就有一段代码试图从某些 JPEG 图片中屏蔽白色背景。今天,此消息在 iPhone 上仍然有效,但在 Apple Watch 上没有任何屏蔽。该代码在预期的成功(非 NULL
)路径上运行,但未执行任何屏蔽。即使我将每个组件的 maskingColors
数组更改为 0.0, 255.0
范围,当以 WKInterfaceImage
(setImage:
)。
带有存储在资产目录中的 alpha 通道的 PNG 图像似乎可以在 Apple Watch 上以 WKInterfaceImage
正确显示。
CGImageCreateWithMaskingColors
Apple 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);
}
这似乎是自 iOS 7 以来就存在的问题。有关详细信息,请参阅此 post:CGImageCreateWithMaskingColors Doesn't Work with iOS7
使用该逻辑,我已按如下方式修改您的代码以产生预期结果:
UIGraphicsBeginImageContextWithOptions(transparentImage.size, NO, 1.0);
[transparentImage drawInRect:CGRectMake(0, 0, transparentImage.size.width, transparentImage.size.height)];
UIImage *anotherRendition = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return (anotherRendition);
我的 iPhone 应用程序中早就有一段代码试图从某些 JPEG 图片中屏蔽白色背景。今天,此消息在 iPhone 上仍然有效,但在 Apple Watch 上没有任何屏蔽。该代码在预期的成功(非 NULL
)路径上运行,但未执行任何屏蔽。即使我将每个组件的 maskingColors
数组更改为 0.0, 255.0
范围,当以 WKInterfaceImage
(setImage:
)。
带有存储在资产目录中的 alpha 通道的 PNG 图像似乎可以在 Apple Watch 上以 WKInterfaceImage
正确显示。
CGImageCreateWithMaskingColors
Apple 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);
}
这似乎是自 iOS 7 以来就存在的问题。有关详细信息,请参阅此 post:CGImageCreateWithMaskingColors Doesn't Work with iOS7
使用该逻辑,我已按如下方式修改您的代码以产生预期结果:
UIGraphicsBeginImageContextWithOptions(transparentImage.size, NO, 1.0);
[transparentImage drawInRect:CGRectMake(0, 0, transparentImage.size.width, transparentImage.size.height)];
UIImage *anotherRendition = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return (anotherRendition);