【问题标题】:iOS Changing half of the image's coloriOS更改图像颜色的一半
【发布时间】:2014-05-22 13:27:07
【问题描述】:

我有一张像这样的图片……

我必须实现的是我必须改变这张图片下半部分的颜色.. 像这个..

我尝试过使用CAGradientLayerMasking,但没有得到结果..

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

更新 1

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

更新 2

【问题讨论】:

  • 为什么不在照片编辑器中编辑图像并将其添加回项目?如果您想在两张图片之间切换.. 只需使用两张图片即可获得您想要的效果?
  • 其实图片的大小是有规律的变化的
  • 您是使用标签来显示文本“那里”还是图像本身。?如果您使用标签来显示文本,那么如何为 UILabel 本身提供必要的背景颜色。
  • 是的,它是一个标签……但它周围有很多填充物……?

标签: ios uiimageview uiimage core-graphics


【解决方案1】:

你给我带来了一些很好的挑战,但是你去吧:

返回带有某种颜色的下半部分图像的方法

- (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;

我的结果:

【讨论】:

  • 刚刚添加有问题..请你可以从这里得到它。
  • 这是我用来调整UIImage *bgImage = [[UIImage imageNamed:@"TM-Bubbles-Blue"] resizableImageWithCapInsets: UIEdgeInsetsMake(30, 32, 30, 23) resizingMode: UIImageResizingModeStretch];的大小
  • 尝试切换顺序,颜色先resize后
  • 这对我很有用,非常感谢!我将它翻译成 Swift,将在下面发布。
【解决方案2】:

在 Swift 4 中。 一些变化

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.draw(in: rect)

    let context = UIGraphicsGetCurrentContext()!
    context.setBlendMode(CGBlendMode.sourceIn)

    context.setFillColor(color.cgColor)

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

    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage!
  }

【讨论】:

  • 正是我需要的。谢谢!
【解决方案3】:

你可以使用一些技巧:

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

【讨论】:

  • 我必须计算背景图像的大小,然后将其放置在视图中
  • 根据我的经验,使用类似的图像和技巧比编写非常复杂的绘图代码更容易绘制像素完美和复杂的复合视图。此外,您应该考虑使该小部件成为两个单独的视图或类似的东西。
猜你喜欢
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多