Итак, я последовал совет в этом вопросе:Как получить UIImage отрицательных цветов без изменения цветового пространства
how to give UIImage negative color effect
но когда я делаю преобразование информация о цветовом пространстве теряется и возвращается к RGB. (Я хочу это в Грей).
Если я NSLog
CGColorSpaceRef
до и после данного кода, он подтверждает это.
CGColorSpaceRef before = CGImageGetColorSpace([imageView.image CGImage]);
NSLog(@"%@", before);
UIGraphicsBeginImageContextWithOptions(imageView.image.size, YES, imageView.image.scale);
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy);
[imageView.image drawInRect:CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height)];
CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeDifference);
CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(),[UIColor whiteColor].CGColor);
CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height));
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGColorSpaceRef after = CGImageGetColorSpace([imageView.image CGImage]);
NSLog(@"%@", after);
Есть ли способ сохранить информацию о цветовом пространстве, или, если нет, как ее изменить после этого?
Edit: Прочитав документацию для UIGraphicsBeginImageContextWithOptions
он говорит:
Для растровых изображений, созданных в прошивкой 3.2, а затем, окружающая среда рисунка использует формат ARGB предварительно умноженный для хранения данных растровых. Если непрозрачным параметром является ДА, битмап рассматривается как полностью непрозрачный, и его альфа-канал игнорируется.
Возможно, это невозможно без изменения его на CGContext
? Я обнаружил, что если я установил параметр opaque
в YES
, он удалит альфа-канал, который является адекватным (читатель tiff, который я использую, не может обрабатывать изображения ARGB). Я бы все же хотел иметь только изображение в градациях серого, чтобы уменьшить размер файла.