1. ホーム
  2. iphone

[解決済み] UIImageの色を変更する

2022-09-29 03:15:18

質問

UIImageの色を変更しようとしています。私のコード。

-(UIImage *)coloredImage:(UIImage *)firstImage withColor:(UIColor *)color {
    UIGraphicsBeginImageContext(firstImage.size);

    CGContextRef context = UIGraphicsGetCurrentContext();
    [color setFill];

    CGContextTranslateCTM(context, 0, firstImage.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);

    CGContextSetBlendMode(context, kCGBlendModeCopy);
    CGRect rect = CGRectMake(0, 0, firstImage.size.width, firstImage.size.height);
    CGContextDrawImage(context, rect, firstImage.CGImage);

    CGContextClipToMask(context, rect, firstImage.CGImage);
    CGContextAddRect(context, rect);
    CGContextDrawPath(context,kCGPathElementMoveToPoint);

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

    return coloredImg;
}

このコードは動作しますが、得られる画像はあまりよくありません。返される画像の境界のピクセルが断続的で、最初の画像のように滑らかではありません。どのように私はこの問題を解決することができますか?

どのように解決するのですか?

iOS 7 以降は、これが最もシンプルな方法です。

Objective-Cです。

theImageView.image = [theImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[theImageView setTintColor:[UIColor redColor]];

Swift 2.0です。

theImageView.image = theImageView.image?.imageWithRenderingMode(.AlwaysTemplate) 
theImageView.tintColor = UIColor.magentaColor()

Swift 4.0です。

theImageView.image = theImageView.image?.withRenderingMode(.alwaysTemplate) 
theImageView.tintColor = .magenta

ストーリーボードです。

まず、画像をテンプレートとしてアセットに設定します(右のバーの「レンダリング」)。すると、画像の色が色合いとして適用されます。