iOS改变图像颜色的一半

时间:2014-04-09 11:21:34

标签: ios uiimageview uiimage core-graphics

我有一张看起来像这样的图片......

enter image description here

我必须要实现的是我必须更改此图像下半部分的颜色。 像这个.. enter image description here

我已尝试使用CAGradientLayerMasking,但没有运气得到结果..

任何帮助都会很棒..提前致谢..

更新1

这是他们在这段代码之后得到的东西。我需要补充的一件事是在使用之前调整图像大小。

enter image description here

更新2

enter image description here

3 个答案:

答案 0 :(得分:7)

你对我提出了一些很好的挑战,但是你走了:

返回带有一些颜色的下半部分图像的方法

- (UIImage *)image:(UIImage *)image withBottomHalfOverlayColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.f, 0.f, image.size.width, image.size.height);

    if (UIGraphicsBeginImageContextWithOptions) {
        CGFloat imageScale = 1.f;
        if ([self respondsToSelector:@selector(scale)])
            imageScale = image.scale;
        UIGraphicsBeginImageContextWithOptions(image.size, NO, imageScale);
    }
    else {
        UIGraphicsBeginImageContext(image.size);
    }

    [image drawInRect:rect];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetBlendMode(context, kCGBlendModeSourceIn);

    CGContextSetFillColorWithColor(context, color.CGColor);

    CGRect rectToFill = CGRectMake(0.f, image.size.height*0.5f, image.size.width, image.size.height*0.5f);
    CGContextFillRect(context, rectToFill);

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

使用示例:

    UIImage *image = [UIImage imageNamed:@"q.png"];
    image = [self image:image withBottomHalfOverlayColor:[UIColor cyanColor]];
    self.imageView.image = image;

我的结果:enter image description here enter image description here

答案 1 :(得分:2)

在Swift 2.3中

func withBottomHalfOverlayColor(myImage: UIImage, color: UIColor) -> UIImage
  {
    let rect = CGRect(x: 0, y: 0, width: myImage.size.width, height: myImage.size.height)


    UIGraphicsBeginImageContextWithOptions(myImage.size, false, myImage.scale)
    myImage.drawInRect(rect)

    let context = UIGraphicsGetCurrentContext()!
    CGContextSetBlendMode(context, CGBlendMode.SourceIn)

    CGContextSetFillColorWithColor(context, color.CGColor)

    let rectToFill = CGRect(x: 0, y: myImage.size.height*0.5, width: myImage.size.width, height: myImage.size.height*0.5)
    CGContextFillRect(context, rectToFill)

    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage!
  }

答案 2 :(得分:0)

你可以使用一些技巧:

  • 使用2张不同的图像并更改整个背景。
  • 使用一种背景颜色(浅蓝色)和两种图像,一种使用下半部分 透明