2015-04-24 12 views
0

У меня уже есть фрагмент кода в приложении для iPhone, который пытается замаскировать белый фон из некоторых изображений JPEG. Сегодня это сообщение по-прежнему хорошо работает на iPhone, но не маскирует его на Apple Watch. Код работает на ожидаемом успешном (не NULL) пути, но маскирование не выполняется. Даже если я изменю массив maskingColors на диапазон 0.0, 255.0 для каждого компонента, маскировка не выполняется (это же изменение на iPhone полностью маскирует изображение), когда отображается в WKInterfaceImagesetImage:).CGImageCreateWithMaskingColors не маскирует на Apple Watch в WKInterfaceImage

Изображения 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); 
} 
+0

Можете ли вы добавить код Watch (то есть, как вы кодируете и устанавливаете изображение)? –

+0

@MikeSwanson Я просто вызываю 'setData' с возвратом опубликованного кода в' WKInterfaceImage' в строке 'WKInterfaceTable'. 'NSData', который я отправляю, он загружается с веб-сайта в виде JPEG из приложения iPhone и переносится на часы в блоке' reply' из 'openParentApplication'. Я также попытался выполнить этап маскировки на телефоне и отправить результат 'UIImagePNGRepresentation()' на часы с теми же результатами. – greg

+0

Исправление: setImage, not setData очевидно. – greg

ответ

1

Это, как представляется, проблема, которая существует с прошивкой 7. См этот пост для более подробной информации: 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); 
+0

Я установлю параметр 'scale'' UIGraphicsBeginImageContextWithOptions' равным 0 вместо 1, но это действительно работает. Действительно, похоже, это ошибка. – greg

 Смежные вопросы

  • Нет связанных вопросов^_^