changer la couleur de l'image dans l'iphone sdk

J'ai une image et je veux changer la couleur de cette image par programmation.

entrez la description de l'image ici

& Je veux changer la couleur de cette image

entrez la description de l'image ici

METTRE À JOUR:

Utilisez cette méthode …

-(UIImage *)imageNamed:(NSSsortingng *)name withColor:(UIColor *)color { // load the image UIImage *img = [UIImage imageNamed:name]; // begin a new image context, to draw our colored image onto UIGraphicsBeginImageContext(img.size); // get a reference to that context we created CGContextRef context = UIGraphicsGetCurrentContext(); // set the fill color [color setFill]; // translate/flip the graphics context (for transforming from CG* coords to UI* coords CGContextTranslateCTM(context, 0, img.size.height); CGContextScaleCTM(context, 1.0, -1.0); // set the blend mode to color burn, and the original image CGContextSetBlendMode(context, kCGBlendModeColorBurn); CGRect rect = CGRectMake(0, 0, img.size.width, img.size.height); CGContextDrawImage(context, rect, img.CGImage); // set a mask that matches the shape of the image, then draw (color burn) a colored rectangle CGContextClipToMask(context, rect, img.CGImage); CGContextAddRect(context, rect); CGContextDrawPath(context,kCGPathFill); // generate a new UIImage from the graphics context we drew onto UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); //return the color-burned image return coloredImg; } 

Utilisez-le comme ci-dessous …

 yourImageView.image = [self imageNamed:@"yourImageName" withColor:[UIColor orangeColor]]; 

J'espère que cela vous sera utile …

Merci pour la méthode – cela fonctionne. En termes de qualité d'image cependant, j'ai trouvé la réponse ici pour rendre une image colorée plus précise:

https://stackoverflow.com/a/4630136/917802

Voici la version Swift:

 extension UIImage { func colorizeWith(color: UIColor) -> UIImage { UIGraphicsBeginImageContext(self.size) let context = UIGraphicsGetCurrentContext() color.setFill() CGContextTranslateCTM(context, 0, self.size.height) CGContextScaleCTM(context, 1.0, -1.0) // set the blend mode to color burn, and the original image CGContextSetBlendMode(context, kCGBlendModeNormal); let rect = CGRectMake(0, 0, self.size.width, self.size.height); CGContextDrawImage(context, rect, self.CGImage); // set a mask that matches the shape of the image, then draw (color burn) a colored rectangle CGContextClipToMask(context, rect, self.CGImage); CGContextAddRect(context, rect); CGContextDrawPath(context,kCGPathFill); // generate a new UIImage from the graphics context we drew onto let coloredImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); //return the color-burned image return coloredImage; } } 

Vous pouvez essayer la réponse d'Ankish Jain , ça marche pour moi.

 theImageView.image = [theImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; [theImageView setTintColor:[UIColor redColor]]; 

CoreImage Color Filters fonctionne très bien pour ce genre de tâches – je les trouve légèrement plus simples que d'utiliser les classs Core Graphic (CG …): Ils fonctionnent en vous permettant d'ajuster les caractéristiques RVB et Alpha de l'image que je les utilise pour changer le fond blanc d'un QRCode en couleur. RGBA de blanc est (1,1,1,1) dans votre cas, je crois que vous devez inverser la couleur. Il suffit de consulter la documentation CI d'Apple, il y a quelques dizaines de filters disponibles. CIColorMasortingx n'est que l'un d'entre eux.

 CIImage *beginImage = [CIImage imageWithCGImage:image.CGImage]; CIContext *context = [CIContext contextWithOptions:nil]; CIFilter *filtercd = [CIFilter filterWithName:@"CIColorMasortingx" //rgreen keysAndValues: kCIInputImageKey, beginImage, nil]; [filtercd setValue:[CIVector vectorWithX:0 Y:1 Z:1 W:0] forKey:@"inputRVector"]; // 5 [filtercd setValue:[CIVector vectorWithX:1 Y:0 Z:1 W:0] forKey:@"inputGVector"]; // 6 [filtercd setValue:[CIVector vectorWithX:1 Y:1 Z:0 W:0] forKey:@"inputBVector"]; // 7 [filtercd setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1] forKey:@"inputAVector"]; // 8 [filtercd setValue:[CIVector vectorWithX:1 Y:1 Z:0 W:0] forKey:@"inputBiasVector"]; CIImage *doutputImage = [filtercd outputImage]; CGImageRef cgimgd = [context createCGImage:doutputImage fromRect:[doutputImage extent]]; UIImage *newImgd = [UIImage imageWithCGImage:cgimgd]; filterd.image = newImgd; CGImageRelease(cgimgd); 

Comme j'ai répondu ici iPhone – Comment coloriez-vous une image? à mon avis, la meilleure façon de coloriser une image à partir d'iOS 7 est en utilisant

 myImageView.image = [[UIImage imageNamed:@"myImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 

puis modifiez le paramètre tintColor de l'imageView ou tout ce qui contient l'image.