Как бы я тонировал изображение программно на iPhone?

Я хотел бы подкрасить изображение эталоном цвета. Результаты должны выглядеть как режим смешивания Multiply в Photoshop, гдеwhites будет заменен наtint:

alt text

Я буду постоянно менять значение цвета.

Follow up: Я бы поместил код для этого в drawRect: метод моего ImageView, верно?

Как всегда,code snippet очень помогло бы в моем понимании, в отличие от ссылки.

Update: Подкласс UIImageView с кодомRamin предложил.

Я положил это в viewDidLoad: моего контроллера представления:

[self.lena setImage:[UIImage imageNamed:kImageName]];
[self.lena setOverlayColor:[UIColor blueColor]];
[super viewDidLoad];

Я вижу изображение, но оно не тонируется. Я также попытался загрузить другие изображения, установить изображение в IB и вызвать setNeedsDisplay: в моем контроллере представления.

Update: drawRect: не вызывается.

Final update: Я нашел старый проект, у которого был настроен imageView, чтобы я мог протестировать код Рамина, и он работает как чудо!

Final, final update:

Для тех из вас, кто только изучает Core Graphics, вот самая простая вещь, которая могла бы работать.

В вашем подклассе UIView:

- (void)drawRect:(CGRect)rect {

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColor(context, CGColorGetComponents([UIColor colorWithRed:0.5 green:0.5 blue:0 alpha:1].CGColor)); // don't make color too saturated

    CGContextFillRect(context, rect); // draw base

    [[UIImage imageNamed:@"someImage.png"] drawInRect: rect blendMode:kCGBlendModeOverlay alpha:1.0]; // draw image
}

Ответы на вопрос(13)

Ваш ответ на вопрос