改变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了答案来呈现更精确的彩色图像:
这里是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或任何包含图像的东西。