Incrustation de couleur

12:03 modifié dans API AppKit #1
Bonjour à  tous,

À partir d'une image .Png j'aimerai faire une incrustation de couleur. C'est à  dire qu'il faudrait que seul l'image soit remplie de la couleur choisi, sans que le fond transparent soit touché !
Quelqu'un a-t-il une idée ?

Merci d'avance  :o

Réponses

  • schlumschlum Membre
    12:03 modifié #2
    dans 1219321269:

    Bonjour à  tous,

    À partir d'une image .Png j'aimerai faire une incrustation de couleur. C'est à  dire qu'il faudrait que seul l'image soit remplie de la couleur choisi, sans que le fond transparent soit touché !
    Quelqu'un a-t-il une idée ?

    Merci d'avance  :o


    Il y a peut-être plus simple avec Core Image, mais sinon, charger l'image dans une NSBitmapImageRep, puis travailler directement sur le tableau des composantes, et réexporter le résultat en png.

  • NseaProtectorNseaProtector Membre
    12:03 modifié #3
    Bonjour, as tu regardé dans les exemples fournis avec xcode, en particulier compositelab ?
    exemple/appkit/compositelab
  • AliGatorAliGator Membre, Modérateur
    12:03 modifié #4
    PNG = 1 à  3 couches couleur... + un canal alpha qui indique la transparence.
    Donc décomposer ton PNG en extrayant la couche alpha, faire ta modif (quitte à  remplir toute ton image de la couleur que tu veux, tant pis si ça te fait un rectangle uni), et réappliquer la couche alpha (qui va donc remettre les zones de transparence et donc remettre ta "forme" de ton image.
  • 12:03 modifié #5
    Et voili, voici le code :
    <br />NSImage* testingColor = [[NSImage alloc] initWithSize:NSMakeSize([bl size].width,[bl size].height)];<br />[bl drawAtPoint:NSMakePoint(0,0) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];<br />[[NSGraphicsContext currentContext] setCompositingOperation:NSCompositeSourceIn];<br />[userColor set];<br />[NSBezierPath fillRect:NSMakeRect(0,0,[testingColor size].width,[testingColor size].height)];<br />[testingColor unlockFocus];<br />
    
Connectez-vous ou Inscrivez-vous pour répondre.