Цвет от iOS к прозрачному в UIImage - PullRequest
9 голосов
/ 29 ноября 2011

Как очистить пурпурную часть UIImage и сделать ее прозрачной?

Я просмотрел многочисленные ответы и ссылки на SO, и ничего не работает (например, Как сделать один цвет прозрачнымв UIImage? ответ 1 удаляет все, кроме красного, ответ 2, очевидно, не работает из-за Почему CGImageCreateWithMaskingColors () возвращает ноль в этом случае? ).

Обновление:

Если я использую CGImageCreateWithMaskingColors с UIImage, я получаю нулевое значение.Если я удаляю альфа-канал (представляю изображение в формате JPEG и читаю его обратно), CGImageCreateWithMaskingColors возвращает изображение, закрашенное черным фоном.

Update2, код:

Возвращает ноль:

const float colorMasking[6] = {222, 255, 222, 255, 222, 255};
CGImageRef imageRef = CGImageCreateWithMaskingColors(anchorWithMask.CGImage, colorMasking);

NSLog(@"image ref %@", imageRef);
// this is going to return a nil imgref.

UIImage *image = [UIImage imageWithCGImage:imageRef];

Возвращает изображение с черным фоном (что является нормальным, поскольку нет альфа-канала):

UIImage *inputImage = [UIImage imageWithData:UIImageJPEGRepresentation(anchorWithMask, 1.0)];

const float colorMasking[6] = {222, 255, 222, 255, 222, 255};
CGImageRef imageRef = CGImageCreateWithMaskingColors(inputImage.CGImage, colorMasking);

NSLog(@"image ref %@", imageRef);
// imgref is NOT nil.

UIImage *image = [UIImage imageWithCGImage:imageRef];

Обновление3:

Я заработал, добавив альфа-канал после процесса маскирования.

Ответы [ 2 ]

4 голосов
/ 21 января 2013

Я сделал эту статическую функцию, которая удаляет белый фон, которую вы можете использовать, заменив маску на диапазон цветов, который вы хотите удалить:

+ (UIImage*) processImage :(UIImage*) image
{
    const float colorMasking[6]={222,255,222,255,222,255};
    CGImageRef imageRef = CGImageCreateWithMaskingColors(image.CGImage, colorMasking);
    UIImage* imageB = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return imageB;
}
4 голосов
/ 29 ноября 2011
UIImage *image = [UIImage imageNamed:@"image.png"];

const float colorMasking[6] = {1.0, 1.0, 0.0, 0.0, 1.0, 1.0};
image = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(image.CGImage, colorMasking)];

Вы получаете ноль, потому что отправленные вами параметры недействительны.Если вы откроете документацию Apple, вы увидите следующее:

Компоненты
Массив цветовых компонентов, которые задают цвет или диапазон цветов для маскировки изображения.Массив должен содержать 2N значений {min [1], max [1], ... min [N], max [N]}, где N - количество компонентов в цветовом пространстве изображения.Каждое значение в компонентах должно быть допустимым значением образца изображения.Если изображение имеет целочисленные пиксельные компоненты, то каждое значение должно находиться в диапазоне [0 .. 2 ** bitsPerComponent - 1] (где bitsPerComponent - это число бит / компонент изображения).Если изображение имеет пиксельные компоненты с плавающей точкой, то каждое значение может быть любым числом с плавающей точкой, которое является допустимым компонентом цвета.

Вы можете быстро открыть документацию, удерживая Option + щелчок мышью по какой-либо функциикласс, например CGImageCreateWithMaskingColors.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...