Заменете цвета в uiimage с друг цвят

Има ли API, който мога да използвам (може би в coreimage), за да променя всички пиксели от определен цвят в друг цвят? Мисля, че мога да разбера как да го направя ръчно, като итерирам през всеки пиксел от изображението, но се надявам, че има по-елегантен (и с по-висока производителност) начин да се постигне това.


person Dave    schedule 28.03.2014    source източник
comment
stackoverflow.com /questions/12396236/   -  person Arun    schedule 28.03.2014
comment
Благодаря, но вече бях виждал тези теми, преди да публикувам и нито една от тях не е точно това, което имах предвид. Първият е използването на изображението като маска, което е същото като предложението по-долу от Kirit. Второто е ръчно повторение през всеки пиксел. Не е ли тук по-ефективен начин да направите това, който използва GPU?   -  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

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

Трябва да можете да използвате филтъра за основно изображение CIColorCube за това. Не съм го използвал преди, но вярвам, че ви позволява да картографирате диапазони от входни цветове към различни изходни цветове.

person Duncan C    schedule 03.04.2014
comment
Ето пример за това как да направите това, което @Duncan спомена в Swift. stackoverflow.com/a/32638622/1807644 - person William T.; 17.09.2015