iPhone アプリに、一部の JPEG 画像から白い背景をマスクしようとするコード スニペットがずっと前からありました。今日でも、このメッセージは iPhone では問題なく機能しますが、Apple Watch ではまったくマスクされません。コードは、予想される成功 (非NULL
) パスで実行されますが、マスキングは実行されません。maskingColors
配列を各コンポーネントの範囲に変更しても、0.0, 255.0
マスキングは実行されません (iPhone でのこの同じ変更は、イメージを完全にマスキングします) WKInterfaceImage
(with でsetImage:
)。
アセット カタログに保存されているアルファ チャネルを含む 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);
}