J'ai depuis longtemps un extrait de code dans mon application iPhone qui tente de masquer le fond blanc de certaines images JPEG. Aujourd'hui, ce message fonctionne toujours bien sur iPhone, mais ne masque absolument rien sur Apple Watch. Le code s'exécute sur le chemin d'accès réussi (non NULL
) attendu, mais aucun masquage n'est effectué. Même si je change le tableau maskingColors
à la plage 0.0, 255.0
pour chaque composant, aucun masquage n'est effectué (ce même changement sur l'iPhone masque complètement l'image) lorsqu'il est affiché dans un WKInterfaceImage
(avec setImage:
).CGImageCreateWithMaskingColors ne masque pas sur Apple Watch dans WKInterfaceImage
Les images PNG avec un canal alpha stockées dans un catalogue d'actifs semblent s'afficher correctement sur Apple Watch dans un WKInterfaceImage
.
Est-ce que CGImageCreateWithMaskingColors
n'est pas sans danger pour 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);
}
Pouvez-vous ajouter le code de la montre (c'est-à-dire comment vous codez et définissez l'image)? –
@MikeSwanson J'appelle simplement 'setData' avec le retour du code affiché sur un' WKInterfaceImage' dans une rangée d'un 'WKInterfaceTable'. Le 'NSData' que j'envoie est téléchargé depuis un site web en JPEG depuis l'application iPhone et transféré à la montre dans le bloc' reply' de 'openParentApplication'. J'ai également essayé d'effectuer l'étape de masquage sur le téléphone et d'envoyer le 'UIImagePNGRepresentation()' résultant à la montre avec les mêmes résultats. – greg
Correction: setImage, pas setData évidemment. – greg