Итак, я последовал совету в этом вопросе:
как создать отрицательный цветовой эффект UIImage
но когда я делаю преобразование, информация о цветовом пространстве теряется и возвращается к 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);
Есть ли способ сохранить информацию о цветовом пространстве, или, если нет, как я могу вернуть ее обратно после этого?
Редактировать: при чтении документации для UIGraphicsBeginImageContextWithOptions
говорится:
Для растровых изображений, созданных в iOS 3.2 и более поздних версиях, среда рисования использует предварительно умноженный формат ARGB для хранения данных растрового изображения. Если для параметра opaque установлено значение YES, растровое изображение считается полностью непрозрачным, а его альфа-канал игнорируется.
Так что, может быть, это невозможно без замены на CGContext
? Я обнаружил, что если я устанавливаю для параметра opaque
значение YES
, то он удаляет альфа-канал, что является адекватным (используемая мной программа для чтения tiff не может обрабатывать изображения ARGB). Я все же хотел бы иметь только изображение в градациях серого, чтобы уменьшить размер файла.