Ce type de masquage est-il possible avec UIImage ou CGImage API dans iOS?

J'ai un UIImage avec du text et j'aimerais appliquer le pattern UIImage comme masquage. Est-ce possible ? Je comprends qu'avec UILabel nous pouvons get ce type de dégradé en utilisant CAGradientLayer. Mais cela peut-il être fait si la source est un UIImage?

L'image peut avoir des symboles / images, etc., autres que des caractères normaux et donc UIImage. Aussi je pourrais réutiliser l'image en appliquant le model différent de masquage selon le context.

Est-ce possible ?

Apprécier ton aide.

EDIT: Merci pour toutes vos réponses. Je comprends appliquer le dégradé à une label de text ou créer une image qui a du text. Mais mon but est d'get ceci .–> Cliquez ici

c'est-à-dire que j'ai un png avec un dessin comme une fleur avec un fond transparent. Je veux appliquer le dégradé à l'object à l'intérieur de cette image à l'exécution avec un gradient.png comme indiqué dans l'image ci-dessus. Est-ce possible avec le masquage?

Merci

On dirait que vous devriez être en mesure d'utiliser CGImageMaskCreate:

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { CGImageRef maskRef = maskImage.CGImage; CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), CGImageGetHeight(maskRef), CGImageGetBitsPerComponent(maskRef), CGImageGetBitsPerPixel(maskRef), CGImageGetBytesPerRow(maskRef), CGImageGetDataProvider(maskRef), NULL, false); CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); return [UIImage imageWithCGImage:masked]; } 

Pour une discussion plus longue, consultez le fil de commentaires ici: http://iosdevelopertips.com/cocoa/how-to-mask-an-image.html

Oui, ça l'est 🙂

 textField.textColor = [UIColor colorWithPatternImage: 
[UIImage imageNamed:@"rainbowGradient.png"]];

Si vous voulez un contrôle ssortingct, l'idée de Jason Whyne pourrait fonctionner. Mais j'aime celui-ci, car il fait environ 8 lignes de less.

Voici juste une autre façon de dessiner une image de text masquant quelque chose. Il est basé sur le mode de fusion kCGBlendModeSourceIn : vous dessinez du text sur un fond clair, puis dessinez le remplissage partout.

 NSSsortingng *theSsortingng = ...; UIFont *theFont = ...; CGSize ssortingngSize = [theSsortingng sizeWithFont:theFont]; // The background must be clear (fully transparent), hence NO as the 2nd argument UIGraphicsBeginImageContextWithOptions(ssortingngSize, NO, 0); [theSsortingng drawAtPoint:CGPointZero withFont:theFont]; // This effectively colorizes the image. Use a pattern color... [patternColor set]; UIRectFillUsingBlendMode(CGRectMake(0, 0, ssortingngSize.width, ssortingngSize.height), kCGBlendModeSourceIn); // ... or an image: [patternImage drawInRect:CGRectMake(0, 0, ssortingngSize.width, ssortingngSize.height) blendMode:kCGBlendModeSourceIn alpha:1.0f]; UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

échantillon en utilisant le masque est bien et fonctionne bien, mais vous fuyez. CGImageMaskCreate et CGImageCreateWithMask allouent (après "create" -> retain rule) donc vous devez libérer mask & image après avoir utilisé:

 CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); UIImage * result = [UIImage imageWithCGImage:masked]; CGImageRelease(mask); CGImageRelease(masked); return result; 

Selon les documents ADC: … Valeur renvoyée Un masque d'image bitmap Quartz. Vous êtes responsable de la libération de cet object en appelant CGImageRelease.