使用遮罩更改 UIImage 的颜色并将该图像替换为彩色图像

Posted

技术标签:

【中文标题】使用遮罩更改 UIImage 的颜色并将该图像替换为彩色图像【英文标题】:Change color of an UIImage with masking and replacing that image with a colored image 【发布时间】:2012-10-22 13:18:22 【问题描述】:

在一个类中,我有一个由五个 UIImage 组成的数组,例如 tiangle.png 和 circle.png。

在当前课程中,我有一个颜色列表。单击 UIImage 并单击一种颜色后,可以更改当前 UIImage 的颜色。 这将通过屏蔽图像、设置其颜色并将旧的 UIImage 替换为所选颜色的新 UIImage 来实现。

但是方法有问题,应该改变颜色:

- (void) changeColor: (UITapGestureRecognizer*) gestureRecognizer

    UIGraphicsBeginImageContext(test.newView.image.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGPoint loc = [gestureRecognizer locationInView:self.view];
    CGContextSetFillColorWithColor(context, [[self colorOfPoint:loc]CGColor]);
    CGContextTranslateCTM(context, 0, test.newView.image.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGRect rect = CGRectMake(test.newView.frame.origin.x,test.newView.frame.origin.x,   test.newView.image.size.width,test.newView.image.size.height);
    CGContextSetBlendMode(context, kCGBlendModeColorBurn);

    CGContextClipToMask(context, rect, test.newView.image.CGImage);
    CGContextAddRect(context, rect);
    CGContextDrawPath(context, kCGPathFill);

    CGImageRef imgRef = CGBitmapContextCreateImage(context);
    UIImage* img = [UIImage imageWithCGImage:imgRef];
    CGImageRelease(imgRef);
    CGContextRelease(context);
    UIGraphicsEndImageContext();
    test.newView.image = img;


唯一发生的事情是单击的 UIImage 将变得不透明。 在这种情况下,保存 UIImage 的 imageview 不会被删除。

【问题讨论】:

【参考方案1】:

我不确定在 UIGraphics 图像上下文中使用 CGBitmapContextCreateImage() 调用获取 imageRef 是否合适。我见过的每个例子都使用

  UIImage* image = UIGraphicsGetImageFromCurrentImageContext();

在关闭图像上下文之前抓取图像。你可以试试。

【讨论】:

是的,谢谢,这是正确的,然后将其值传递给 UIImageView 的真实图像:newView.image = image;

以上是关于使用遮罩更改 UIImage 的颜色并将该图像替换为彩色图像的主要内容,如果未能解决你的问题,请参考以下文章

更改 UIImage 基色,保持白色

从 UIView 以编程方式创建 UIImage

PHP - 替换图像中的颜色

如何使用 Accelerate Framework 将带有遮罩的图像组合成一个 UIImage?

Swift 3:UIImage 设置为模板图像并更改色调颜色时不显示图像

UIImage 的透明颜色为白色