Заменить цвет в uiimage другим цветом

Есть ли API, который я мог бы использовать (возможно, в coreimage), чтобы изменить все пиксели определенного цвета на другой цвет? Я думаю, что могу понять, как сделать это вручную, перебирая каждый пиксель изображения, но я надеюсь, что есть более элегантный (и более производительный) способ сделать это.


person Dave    schedule 28.03.2014    source источник
comment
stackoverflow.com /вопросы/12396236/   -  person Arun    schedule 28.03.2014
comment
Спасибо, но я уже видел эти темы до того, как опубликовал, и это не совсем то, что я имел в виду. Первый — это использование изображения в качестве маски, что соответствует приведенному ниже предложению Кирита. Второй вручную перебирает каждый пиксель. Разве здесь нет более эффективного способа сделать это с использованием графического процессора?   -  person Dave    schedule 28.03.2014


Ответы (2)


цвет вашего изображения заменяется красным цветом в приведенном ниже коде

Код исходного изображения:

UIImageView *image1 =[[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
[image1 setImage:[UIImage imageNamed:@"Lock.png"]];
[self.view addSubview:image1];

Код изображения Rad Color

CGRect rect = CGRectMake(0, 0, image1.frame.size.width, image1.frame.size.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClipToMask(context, rect, [UIImage imageNamed:@"Lock.png"].CGImage);
CGContextSetFillColorWithColor(context, [[UIColor redColor] CGColor]);
CGContextFillRect(context, rect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImage *flippedImage = [UIImage imageWithCGImage:img.CGImage
                                            scale:1.0 orientation: UIImageOrientationDownMirrored];

image1.image = flippedImage;

Исходное изображение

введите здесь описание изображения

Изображение красного цвета

введите здесь описание изображения

person Kirit Modi    schedule 28.03.2014
comment
Спасибо. Я мог бы разбить исходное изображение на несколько изображений маски, а затем использовать этот код, чтобы делать то, что я хочу, но это не совсем то, что я имел в виду. Я ищу такой метод, как: changeColor (UIImage * img, UIColor * fromColor, UIColor * toColor), который я мог бы использовать, например, для изменения всего синего в изображении американского флага на зеленый. - person Dave; 28.03.2014
comment
белая секция прозрачна, поэтому код меняется с синего на красный. Но белая секция UIColor белая... изображение станет красным..... - person Sage; 10.12.2014

Для этого вы должны иметь возможность использовать фильтр Core Image CIColorCube. Я не использовал его раньше, но я считаю, что он позволяет сопоставлять диапазоны входных цветов с разными выходными цветами.

person Duncan C    schedule 03.04.2014
comment
Вот пример того, как сделать то, что @Duncan упомянул в Swift. stackoverflow.com/a/32638622/1807644 - person William T.; 17.09.2015