Есть ли способ изменить цвет изображения без потери рисунка на нем - PullRequest
0 голосов
/ 27 января 2012

Есть ли способ изменить цвет изображения, не теряя на нем узор?

1 Ответ

6 голосов
/ 27 января 2012

Попробуйте это (категория UIImage):

.h

@interface UIImage (Overlay)

- (UIImage *)imageWithOverlayColor:(UIColor *)color;

@end

.m

#import "UIImage+Overlay.h"

@implementation UIImage (Overlay)

- (UIImage *)imageWithOverlayColor:(UIColor *)color
{        
    CGRect rect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height);

    if (UIGraphicsBeginImageContextWithOptions) {
        CGFloat imageScale = 1.0f;
        if ([self respondsToSelector:@selector(scale)])  // The scale property is new with iOS4.
            imageScale = self.scale;
        UIGraphicsBeginImageContextWithOptions(self.size, NO, imageScale);
    }
    else {
        UIGraphicsBeginImageContext(self.size);
    }

//    [self drawInRect:rect];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(context, 0, self.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);

    CGContextSetBlendMode(context, kCGBlendModeMultiply);
       CGContextDrawImage(context, rect, self.CGImage);
    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextClipToMask(context, rect, self.CGImage);
    CGContextFillRect(context, rect);   

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

    return image;
}

@end

Назовите это так:

UIImage *image = [UIImage imageNamed:@"image.png"]; 
image = [image imageWithOverlayColor:[UIColor redColor]];

Изображения до и после:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...