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

Algorithmes et structures de données Discussion :

Additionner 2 couleurs


Sujet :

Algorithmes et structures de données

  1. #1
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut Additionner 2 couleurs
    Existe t il un algorithme pour passer d'une couleur à une autre?

    Par exemple, j'ai une couleur rouge RGB (255, 0, 0) sur une image que je veux changer en vert RGB (0, 255, 0). Mais sur mon image, il existe d'autres dégradés de rouge, par exemple (0, 228, 0), que je veux aussi changer en vert, mais pas en vert vif, mais son vert correspondant (0, 228, 0)!

    Cela semble facile pour des couleurs primaires, mais pour les autres, je n'ai pas trouvé!

    L'algo que je recherche à écrire est le suivant:

    Passer(Image, Rouge, Vert)
    debut
    CalculerDifferenceEntre2Couleur(Rouge, Vert) -> retourn une couleur additif.
    Pour chaque pixel de Image
    recupererPixel
    si pixel est un degradé de rouge
    ajouter(pixel, additif)
    fin


    Ext ce déjà réalisable?

    Merci!!

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Si tu as une couleur de la forme (r,g,b), retourner (b,r,g) ne va t-il pas ?
    Je ne répondrai à aucune question technique en privé

  3. #3
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Bonjour,

    Cela marche t il dans le cas général?

    Passer du violet (128, 0, 128) au orange (255, 128, 0) par exemple?

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Je pense qu'il faut définir trois couleurs de départ C1, C2 et C3 et trois couleurs d'arrivée A1, A2, A3 qui forment des bases de l'espace RGB.

    (par exemple dans ton cas C1 = violet (128, 0, 128) et A1 = (255, 128, 0))

    Mais il faudrait en définir 2 autres pour avoir une base de l'espace RGB. Ensuite trouver une matrice de passage d'une base à l'autre.

    C'est le style de transformation qui est utilisé par exemple pour le système YUV.

    On a une première base du type : (1,0,0), et (0,1,0) et (0,0,1) qui correspond à la base RGB classique (on a divisé par 255)

    Et le passage d'une base à celle de YUV se définit par une matrice de changement de base (par exemple accessible ici : http://fr.wikipedia.org/wiki/YUV)

    Edit: Mais il y a peut être plus simple. En tout cas, si tu dis : passer du violet à l'orange, cela ne peut pas se faire de manière unique.

    Par exemple en disant : rouge à vert. Tu peux mettre ensuite le vert à bleu et le bleu à rouge, ou encore le bleu à bleu et le vert à rouge. C'est pourquoi il faut définir 2 ou 3 transformations pour avoir qqch d'unique.
    Je ne répondrai à aucune question technique en privé

  5. #5
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Pour etre plus simple, je souhaite faire la même chose qu'avec PaintShopPro 7.

    Ouvrir une image contenant du vert.
    Menu Color>Adjust>hue/saturation/lightness
    Modifier la valeur du champ "edit" tu choisis le vert (greens).

    Apres, en modifiant la valeur du "hue", tu obtiens l'effet que je désire réaliser!


    En ce qui concerne ta réponse, je vais essayer de passer du mode RBG au mode YUV. Je vais voir si c'est possible. J'avoue par contre, n'avoir pas tout pigé Je vais me renseigner sur ce sujet!

    Merci !!

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par billynirvana
    En ce qui concerne ta réponse, je vais essayer de passer du mode RBG au mode YUV.
    Non, non, j'ai dit ça juste pour te montrer un exemple de changement de base, mais ça ne correspond pas à ce que tu souhaites je pense.

    Je n'ai pas PaintShop, alors je ne peux pas voir exactement ce que tu souhaitais
    Edit : en fait ya dans GIMP, je vais regarder.

    Edit2 : Dans http://fr.wikipedia.org/wiki/Codage_....A9_de_teintes, il parle du changement de système de codage en parlant notamment de teinte (=hue)(c'est ce qu'il faut changer pour avoir ce que tu souhaites je pense).
    Je ne répondrai à aucune question technique en privé

  7. #7
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    J'ai mis en fichier joint un zip contenant une image bmp. En partant d'un personnage, obtenir tous les autres!
    Fichiers attachés Fichiers attachés

  8. #8
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    J'ai presque trouvé avec JAVA comment m'en sortir (pour modifier juste la couleur verte) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
      private static boolean isGreenColor(Color color) {
        int diff = 32;
     
        boolean isRedFarFromGreen = (color.getGreen() - color.getRed() > diff);
        boolean isBlueFarFromGreen = (color.getGreen() - color.getBlue() > diff);
        boolean isRedNearBlue = (color.getRed() - color.getBlue() < diff) || (color.getBlue() - color.getRed() < diff);
     
        return isBlueFarFromGreen && isRedFarFromGreen && isRedNearBlue;
      }
     
      private static Color changeHueColor(Color color, int teinte) {
        float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), new float[3]);
        int newColor = Color.HSBtoRGB(0.45f, hsb[1], hsb[2]);
     
        return new Color(newColor);
      }
     
      public static BufferedImage changeColor(BufferedImage sprite, int teinte) {
        int tailleX = sprite.getWidth();
        int tailleY = sprite.getHeight();
     
        int pixel, newPixel;
        Color pixelColor = null;
        Color newPixelColor = null;
        for(int i=0; i<tailleX; i++) {
          for (int j=0; j<tailleY; j++) {
            pixel = sprite.getRGB(i, j);
            pixelColor = convertIntToColor(pixel);
     
            if (isGreenColor(pixelColor)) {
              teinte = ((teinte % 100) + 100) % 100;
              newPixelColor = changeHueColor(pixelColor, teinte);
              newPixel = convertColorToInt(newPixelColor);
              sprite.setRGB(i, j, newPixel);
            }
          }
        }
     
        return sprite;
      }
    Le problème consiste maintenant à convertir mon entier teinte entre 0 et 100 en un float compris entre 0.00f à 1.00f.

  9. #9
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par billynirvana
    Le problème consiste maintenant à convertir mon entier teinte entre 0 et 100 en un float compris entre 0.00f à 1.00f.
    Ca n'a plus l'air trop violent maintenant
    Je ne répondrai à aucune question technique en privé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. Réponses: 4
    Dernier message: 14/10/2005, 14h02
  3. Couleur d'une JComboBox disabled
    Par ced dans le forum Composants
    Réponses: 6
    Dernier message: 06/01/2004, 15h33
  4. Mixage de Couleurs
    Par exxos dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 29/05/2002, 13h34
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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