0

我有两个 UIImageViews,我想将图像从一个复制到另一个并调整颜色,但这会导致奇怪的拉伸。

这是我用来制作副本的代码:

_selectedIcon.image = groupView.icon;
[ViewUtils colorImageView:_selectedIcon withRed:0.843 Green:0.3176 andBlue:0.066667];

如果我只使用第一行,它会很好地复制图像,看起来像这样:

正确的

它有点大,因为它看起来突出显示。但它会复制并正确缩放。然后当我尝试为它着色时,它会这样做:

错误的

这是我用来为图像着色的代码:

+(void)colorImageView:(UIImageView*)source withRed:(CGFloat)red Green:(float)green andBlue:(float)blue
{
    // Create a context containing the image.
    UIGraphicsBeginImageContext(source.bounds.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    // The mask needs to be upside down for some reason
    CGContextTranslateCTM(context, 0, source.bounds.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextClipToMask(context, source.bounds, [source.image CGImage]);
    CGContextFillRect(context, source.bounds);

    [[UIColor colorWithRed:red green:green blue:blue alpha:1.0] set];
    UIBezierPath *imagePath = [UIBezierPath bezierPathWithRect:source.bounds];
    [imagePath fill];
    // Retrieve the new image.
    source.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}

我尝试了许多不同的方法来缩放着色代码中的图像,但似乎没有任何效果。有人有建议吗?

4

1 回答 1

0

我想到了。图像正在拉伸以适合整个 UIImageView,因此我需要调整边界以使其正确缩放。这是我使用的代码:

float ratioX = source.bounds.size.width / source.image.size.width;
float ratioY = source.bounds.size.height / source.image.size.height;
float ratio = MIN(ratioX, ratioY);
CGRect bounds = CGRectMake(0, 0, source.image.size.width * ratio, source.image.size.height * ratio);
于 2013-03-06T18:03:22.220 回答