Color de iOS a transparente en UIImage

¿Cómo puedo borrar la parte magenta de un UIImage y hacerlo transparente?

He mirado a través de numerosas respuestas y enlaces en SO y nada funciona (por ejemplo, Cómo hacer que un color sea transparente en un UIImage? La respuesta 1 elimina todo less el rojo, la respuesta 2 aparentemente no funciona debido a Por qué CGImageCreateWithMaskingColors () devuelve nil en este caso? )

Actualizar:

Si uso CGImageCreateWithMaskingColors con el UIImage obtendré un valor nulo. Si elimino el canal alfa (represento la image como JPEG y la vuelvo a leer) CGImageCreateWithMaskingColors devuelve una image pintada con un background negro.

Actualización2, el código:

Devolución nula:

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]; 

Devolver una image con background negro (que es normal ya que no hay canal alfa):

 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]; 

Actualización3:

Lo conseguí agregando el canal alfa después del process de enmascaramiento.

 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)]; 

Recibe nil, porque los parameters que envía son inválidos. Si abre la documentation de Apple, verá esto:

Componentes
Una matriz de componentes de color que especifica un color o range de colors para enmascarar la image. La matriz debe contener valores de 2N {min [1], max [1], … min [N], max [N]} donde N es el número de componentes en el espacio de color de la image. Cada valor en los componentes debe ser un valor de muestra de image válido. Si la image tiene componentes de píxeles integers, entonces cada valor debe estar en el range [0 .. 2 ** bitsPerComponent – 1] (donde bitsPerComponent es el número de bits / componente de la image). Si la image tiene componentes de píxeles en coma flotante, cada valor puede ser cualquier número de coma flotante que sea un componente de color válido.

Puede abrir rápidamente la documentation manteniendo presionada la tecla Opción + Mouse. Haga clic en alguna function o class, como CGImageCreateWithMaskingColors.

Hice esta function estática que elimina el background blanco que puede usar para replace la máscara con el range de color que desea eliminar:

 + (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; }