IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Changer différentes couleurs dans une image


Sujet :

Flex

  1. #1
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut Changer différentes couleurs dans une image
    Bonjour à tous,
    je voudrais changer les différentes couleurs composant une image. Je donne une exemple, si j'ai une couleur bleu et couleur rouge, je voudrais changer la rouge sans que la bleue soit affectée.

    C'est vrai que je suis passé par des codes jouant sur les pixels de l'image mais le rendu n'est pas fidèle, l'image perds sa qualité au profit d'un dessin.

    Alors qu'avec une image à couleur unique, en utilisant une matrix, non seulement l'image garde sa qualité avec zone d'ombre et tout et la couleur est parfaite.

    Avec une image qui comporte 2 ou 3 couleur, je suis obligé de la convertir dans mon code en bitmap, récupérer les zones où les pixels ont la même couleur selon une tolérance et c'est vraiment pas beau, à la fin quand j'applique mon changement de couleur, je me retrouve avec un dessin.

    Merci de me donner des pistes, des api puissants ou des exemples de codes.

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Salut,

    As tu regardé ce que proposait Degrafa? c'est un framework graphique, je ne sais pas si il répondra à ton besoin, mais tu peux au moins y jeter un oeil.

    Sinon il y a peut etre la librairie de traitement d'image de Joa Ebert qui pourrait t'aider.

    Côté matrice, je peux te montrer un exemple qui permet de convertir une image en niveau de gris par exemple (obj étant un BitmapData) :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var rLum:Number = 0.2225;
    var gLum:Number = 0.7169;
    var bLum:Number = 0.0606; 
     
    var matrix:Array = [rLum, gLum, bLum, 0, 0,
                                    rLum, gLum, bLum, 0, 0,
                                    rLum, gLum, bLum, 0, 0,
                                    0,    0,    0,    1, 0 ];
     
    var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
    obj.applyFilter(obj, new Rectangle(0,0,obj.width,obj.height), new Point(0,0), filter);


    Tiens nous au courant

  3. #3
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    Bonjour Jim,

    merci pour ta réponse rapide, c'est vraiment sympa et justement, j' avais utilisé le code que tu viens de mettre dans ma méthode ci-dessous afin d'avoir un aperçu, mais je me suis rendu compte que mon image png se transformait en dessin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //Application de la nouvelle couleur
    private function applyFilter(data:*):void {
    var greenz:Array = [ 0,0,0,0,0,
    			0,1.5,0,0,0,
    			0,0,0,0,0,
    			0,0,0,1,0 ];
    var filter:ColorMatrixFilter = new ColorMatrixFilter(greenz);
    var pixels:Array = data.pixels as Array;	
    var source:BitmapData = Bitmap(img.content).bitmapData as BitmapData;
    for each (var colourObj:* in pixels) {
    source.applyFilter(source, new Rectangle(colourObj.x, colourObj.y, 1, 1), new Point(colourObj.x, colourObj.y), filter);	
    }
    }
    //Voilà ma méthode qui m'offre tous les pixels contenu dans mon image, j'utilise aussi dans cette méthode un api Flash récupéré sur ce site

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Creation de la palette de couleur
    private function createColourPalette( event:SliderEvent = null ):void{
    while ( pixelContains.numChildren > 0 ) pixelContains.removeChildAt(0);		
    //—————————— Usage de la classe ColourUtils			
    m_colours = ColourUtils.colourPalette(m_inputImage, 32, m_tolerance);
    //
    trace( 'Palette de couleur crée\n' );
    for each( var colourObj:* in m_colours ){
     trace( '0x' + colourObj.colour.toString(16) );
    }
    }
    Ainsi ce code, m'extrait toutes les couleurs contenu dans mon image, et ensuite en jouant sur la tolérance j'arrive à obtenir les couleurs que je veux modifier.

    Côté de defraga, j'ai parcouru et je l'ai même utilisé dans mon projet mais il m'offre pas ce dont j'ai besoin en ce moment.

  4. #4
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    Sinon, dis moi Jim serait-ce possible de superposer plusieurs calques représentant les zones de couleurs de l'image ??

    Genre je découpe les zones de couleurs depuis photoshop, je les exporte en png et ensuite superposer tout ça dans un Canvas.

  5. #5
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    euh oui c'est possible, mais du coup je me questionne sur ton besoin ... si tu le fait sous photoshop c'est que tu n'as pas besoin de le faire logiciellement(j'entends par la : développement)

    Peux tu me résumer ton besoin initial, parce que je n'ai pas du bien comprendre

  6. #6
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par cashmoney Voir le message
    Sinon, dis moi Jim serait-ce possible de superposer plusieurs calques représentant les zones de couleurs de l'image ??

    Genre je découpe les zones de couleurs depuis photoshop, je les exporte en png et ensuite superposer tout ça dans un Canvas.
    Salut

    Oui, une solution simpliste et déjà testée.
    On peut tout aisemment déposer une image sur une autre image dans Flex.
    Suffit de bien les mettre dans l'ordre d'affichage.
    Et ensuite, jouer avec les attributs visible (false ou true) en fonction d'un x événement.
    Enfin, c'est juste un avis, Il y peut-être plus rationnel, mais bon, pourquoi pas.

  7. #7
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    Mon besoin initial est de créer un outils de personnalisation en ligne, couleur, texte, dimension etc...
    j'ai détaillé mon projet en plusieurs sous module et là, je suis à la modification des couleurs.

    Merci alain31tl, mais vue que j'aurais plusieurs image différentes le positionnement sera un soucis.

    sinon, j'ai aussi essayer ce code qui appliquer un filtre sur une partie de l'image et selon les paramètres donnés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    monImage.threshold(monImage,monImage.rect,monImage.rect.topLeft,"!=",
    couleur1, couleur2);
    En fait ce code signifie, appliquer la couleur2 sur les parties de mon image qui ont la couleur différente de la couleur1.

    Ainsi, si j'ai une image en Bleu-blanc, si je décide de changer la couleur blanche en rouge, j'aurais à écrire ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    monImage.threshold(monImage,monImage.rect,monImage.rect.topLeft,"!=",
     Bleu, rouge);
    Voilà, mais je ne l'ai pas encore tester vue que moi je bosse avec des matrix, je dois convertir mon filtre en unit et ensuite en hexa.

  8. #8
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Ok
    Je répondais precisemment à ta file de 11h48.

    Mais là, ce nest plus du tout le même sujet et celà dépasse mes p'tites compétences.
    Je suis désolé de ne pouvoir te donner d'autres sujets de réflexion.

  9. #9
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    Ce n'est rien, c'est que des bouts de codes alain31tl, ne te minimise pas. Moi aussi je ne suis pas un pro, j'essai de me débrouiller comme je peux pour finir et rendre ce projet. J'avoue que je préfère du java, mais vue l'évolution des choses, faut être multitâche

  10. #10
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    Me voilà à nouveau avec un autre soucis de convertion, j'essai de convertir ma matrix en uint mais il me ramène à chaque fois zéro comme résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    static public function RGBtoUINT(rgb:Array):uint{
    var red:uint = rgb[0] << 16;//je récupère le 1er rang qui représente le rouge
    var green:uint = rgb[1] << 8;//ainsi de suite
    var blue:uint = rgb[2];
     return (red + green + blue);
     }
    au final, j'obtiens 0, comprends pas

    Je crois que je suis fatigué de réfléchir

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    Je crois que je suis fatigué de réfléchir
    Manque d'habitude ?

    Sérieusement, est-ce que tu as essayé avec un typage explicite ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var red:uint = uint( rgb[0] ) << 16;

  12. #12
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    Je n'ai pas essayé, mais je suis sur plusieurs front en même temps, alors je n'arrive pas à réfléchir à tout. je teste le code et je te dis.

  13. #13
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    Merci, mais le cast en uint ne fonctionne pas.

  14. #14
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    voilà un peu ce que je suis en train de faire, biensûre je suis loin d'avoir la même finition que cet outils de personnalisation, mais j'avance tout doucement.

    regarder et vous verrez si vous avez des api à me conseiller

    Merci

Discussions similaires

  1. [serieux] Changer les couleurs d'une image
    Par TabrisLeFol dans le forum La taverne du Club : Humour et divers
    Réponses: 5
    Dernier message: 14/12/2006, 13h27
  2. [GD] Différentes informations dans une image.
    Par ~~PriVate JoKe~~ dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 16/11/2006, 22h29
  3. Réponses: 12
    Dernier message: 11/09/2006, 10h57
  4. changer de couleur dans une cellule stringgrid
    Par popy1970 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 24/04/2006, 20h21
  5. Réponses: 2
    Dernier message: 04/04/2006, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo