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

时间:2012-10-22 13:18:23

标签: ios uiimage cgcolor

在一个班级中,我有一个由五个UIImages组成的数组,例如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 个答案:

答案 0 :(得分:1)

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

  UIImage* image = UIGraphicsGetImageFromCurrentImageContext();

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