iPhone SDK инвертирует цвета UIImage

У меня есть приложение для iPhone, которое позволяет человеку рисовать пальцем на экране. Они рисуют белой линией на черном фоне. Однако, когда я загружаю это изображение на веб-сервер, сама линия становится белой. Я пытался работать с основными графическими библиотеками в поисках способа инвертировать цвет нарисованного изображения. Фон не установлен, поэтому он должен быть прозрачным. Выполнение инвертирования изображения должно заменить белое на черное.

Кто-нибудь знает, возможно ли это через основную графическую библиотеку?

Ваше здоровье


person user273169    schedule 15.02.2010    source источник


Ответы (2)


В итоге я нашел хороший способ сделать это. Вместо того, чтобы просто сделать фон исходного изображения прозрачным, я делаю его черным. Теперь на черном фоне белые линии. Тогда это было просто делом:

UIGraphicsBeginImageContext(image.size);
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy);
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeDifference);
CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(),[UIColor whiteColor].CGColor);
CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, image.size.width, image.size.height));
UIImage *returnImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Переменная image представляет собой исходное изображение с белой линией на черном фоне. Спасибо за вашу помощь Дэвид Соуси

person user273169    schedule 15.02.2010
comment
Как вы установили цвет фона на черный? - person Slee; 27.11.2010

да. Вы должны иметь возможность сделать это в CALayer с помощью вызовов CGContext или непосредственно с помощью буфера в CGImage. Есть и другие примеры того, как идти вперед и назад с сохранением изображения из UIView, также на Stackoverflow.

person David Sowsy    schedule 15.02.2010
comment
Не могли бы вы добавить несколько ссылок на эти примеры на SO здесь? - person Palimondo; 04.03.2011