2011-11-29 6 views
9

Comment puis-je effacer la partie magenta d'un UIImage et le rendre transparent?Couleur iOS à transparente dans UIImage

Je l'ai regardé à travers de nombreuses réponses et des liens sur le SO et rien ne fonctionne (par exemple How to make one color transparent on a UIImage? réponse 1 supprime tout, rouge, réponse 2 ne semble pas marché à cause de Why is CGImageCreateWithMaskingColors() returning nil in this case?).

Mise à jour:

Si je CGImageCreateWithMaskingColors avec le UIImage je reçois une valeur nulle. Si je supprime le canal alpha (je représente l'image au format JPEG et la relire) CGImageCreateWithMaskingColors renvoie une image peinte avec un arrière-plan noir.

Update2, le code:

nil retour:

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

retour d'une image avec un fond noir (ce qui est normal puisqu'il n'y a pas de canal alpha):

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

Update3:

Je l'ai fait fonctionner en ajoutant le canal alpha après le processus de masquage.

+2

votre code postal. –

+2

Ajout du code. –

Répondre

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

Vous recevez zéro, car les paramètres que vous envoyez sont incorrects. Si vous ouvrez la documentation Apple, vous verrez ceci:

Composants
Un tableau de composants de couleurs qui spécifient une couleur ou une gamme de couleurs pour masquer l'image avec. Le tableau doit contenir 2N valeurs {min [1], max [1], ... min [N], max [N]} où N est le nombre de composants dans l'espace colorimétrique de l'image. Chaque valeur dans les composants doit être une valeur d'échantillon d'image valide . Si l'image a des composantes de pixels entières, alors chaque valeur doit être dans l'intervalle [0 .. 2 ** bitsPerComponent - 1] (où bitsPerComponent est le nombre de bits/composant de l'image). Si l'image a des composantes de pixel à virgule flottante, alors chaque valeur peut être n'importe quel nombre à virgule flottante qui est un composant de couleur valide.

Vous pouvez ouvrir rapidement la documentation en maintenant Option + Clic Clic sur une fonction ou une classe, comme CGImageCreateWithMaskingColors.

+0

Je viens de l'essayer et ça retourne un uiimage complètement transparent. –

+0

Voici à quoi ressemble l'image d'entrée: http://i.imgur.com/lxJdm.png (c'est la version png, en interne c'est un UIImage de UIImagePicker) –

4

J'ai fait cette fonction statique qui supprime le fond blanc vous pouvez l'utiliser en remplaçant le masque avec la gamme de couleurs que vous souhaitez supprimer:

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

J'ai voté ceci avant de le tester, ça ne marche pas t travail. –

+0

Il travaille sur mon projet et j'enlève la gamme de couleur blanche.Je pense que vous spécifiez la gamme de couleurs comme dans celui-ci que j'utilise de 222 à> 255 pour que Red soit supprimé. Je ne comprends peut-être pas 100%, mais vous pouvez essayer à nouveau avec la gamme dont vous avez besoin. –

+0

@khaledannajar J'ai utilisé ce code c'est un travail parfait mais encore un pixcel blanc ne peut pas enlever de la bordure de la ligne vide que j'ai dessinée par programme dans mon application – kb920

Questions connexes