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.