改变iphone SDK中图像的颜色

我有一个图像,我想通过编程方式改变图像的颜色。

在这里输入图像说明

我想改变这个图像的颜色

在这里输入图像说明

更新:

使用这种方法…

-(UIImage *)imageNamed:(NSString *)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; } 

像波纹pipe一样使用它…

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

希望这对你有帮助…..

感谢您的方法 – 它的工作原理。 然而就图像质量而言,我在这里find了答案来呈现更精确的彩色图像:

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

这里是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; } } 

你可以试试Ankish Jain的答案 ,它适合我。

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

CoreImage滤镜对于这类任务非常适用 – 我发现它们比使用Core Graphic类(CG …)稍微简单一点:它们的工作原理是允许您调整我一直使用的图像的RGB和Alpha特性将QRCode的白色背景更改为彩色。 (1,1,1,1)在你的情况下,我相信你必须扭转颜色。 只需检查苹果公司的CI文档,有几十个filter可用CIColorMatrix只是其中之一。

 CIImage *beginImage = [CIImage imageWithCGImage:image.CGImage]; CIContext *context = [CIContext contextWithOptions:nil]; CIFilter *filtercd = [CIFilter filterWithName:@"CIColorMatrix" //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); 

正如我在这里回答的iPhone – 你如何为图像着色? 在我看来,从iOS 7中着色图像的最好方法是使用

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

然后更改imageView的tintColor或任何包含图像的东西。