0

我想为可拉伸的 UIImage 着色,但无法使其工作。在这篇文章的帮助下:如何更改 UIImage 的颜色我已经成功地为我的 UIImage 着色,但是当我使它可拉伸时,颜色没有设置在“新”框架上。

这是我使用类别设置颜色的方法:

+ (UIImage *)imageNamed:(NSString *)name withColor:(UIColor *)color
{
    UIImage *image = [UIImage imageNamed:name];
    if (color == nil)
        return image;
    CGRect rect = CGRectMake(0.f, 0.f, image.size.width, image.size.height);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClipToMask(context, rect, image.CGImage);
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return [UIImage imageWithCGImage:img.CGImage
                               scale:1.0
                         orientation:UIImageOrientationDownMirrored];
}

任何建议表示赞赏...

4

2 回答 2

1

此代码应该可以工作:

+ (UIImage *)imageNamed:(NSString *)name withColor:(UIColor *)theColor
{
    UIImage *baseImage = [UIImage imageNamed:name];
    UIGraphicsBeginImageContext(baseImage.size);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGRect area = CGRectMake(0, 0, baseImage.size.width, baseImage.size.height);
    CGContextScaleCTM(ctx, 1, -1);
    CGContextTranslateCTM(ctx, 0, -area.size.height);
    CGContextSaveGState(ctx);
    CGContextClipToMask(ctx, area, baseImage.CGImage);
    [theColor set];
    CGContextFillRect(ctx, area);
    CGContextRestoreGState(ctx);
    CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
    CGContextDrawImage(ctx, area, baseImage.CGImage);
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}
于 2013-04-14T12:57:01.370 回答
0

你的包中有一张图片,你用上面的方法给它上色,它不会修改原始图像,但会返回一个新图像。这个新图像是普通图像,这意味着您看到的颜色是图像中的实际位。如果您现在从新创建的图像而不是原始图像创建新的可拉伸图像,它应该是正确的颜色。

如果不创建一个小型演示项目并将其发布在 DropBox 上,让我们看看它。

于 2013-04-14T12:58:05.230 回答