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

avec Java Discussion :

problème de conversion d'un entier en color


Sujet :

avec Java

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut problème de conversion d'un entier en color
    Bonjour,

    C'est la première fois que je trvaille avec Color, et là j'essaye de convertir un entier représentant une couleur RGB, en code hexa
    voici ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public String convertcolor(int intColor)
     
    Color couleur=new Color(intColor);
    String hex = Integer.toHexString(couleur.getRGB() & 0xffffff);
    	if (hex.length() < 6) 
    		hex = "0" + hex;
     
    	hex = "#" + hex;
    return hex;
    par exemple pour l'entier 255009033 ici rgb correspond à (r=255,g=009,b=033) ce code correspond à #FF0921 en héxa, alors que ma fonction renvoie #332109

    merci pour votre aide

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par InfoStd Voir le message
    par exemple pour l'entier 255009033 ici rgb correspond à (r=255,g=009,b=033)
    Non, ça ne marche pas comme ça.

    Si c'était le cas, tu pourrais aussi avoir l'entier 255844562, qui correspondrait à (r=255,g=844,b=562). Ce qui est impossible parce que r, g et b doivent être compris entre 0 et 255.

    Pour passer de (r, g, b) à un entier, on utilise la forumule :

    Ce qui, dans le cas (r=255,g=009,b=033) correspond à l'entier 16714017.

    Au passage, la classe Color est parfaitement inutile pour faire cette conversion.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Non, ça ne marche pas comme ça.

    Si c'était le cas, tu pourrais aussi avoir l'entier 255844562, qui correspondrait à (r=255,g=844,b=562). Ce qui est impossible parce que r, g et b doivent être compris entre 0 et 255.

    Pour passer de (r, g, b) à un entier, on utilise la forumule :

    Ce qui, dans le cas (r=255,g=009,b=033) correspond à l'entier 16714017.

    Au passage, la classe Color est parfaitement inutile pour faire cette conversion.
    Merci thelvin..par contre comment je peut récupérer r, g et b de mon entier?
    parce que moi je reçois un entier 255009033 comment le diviser en 3 entier différent?

    Merci

  4. #4
    Membre chevronné
    Avatar de maxusn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 175
    Par défaut
    Il y a certainement une meilleur façons de le faire mais tu peux diviser ton entier par des multiples de 10 :

    par exemple pour recuperer la valeur de r :

    tu reçois 255009033, tu divise par 1 000 000 = 255,009033

    tu récupères la partie entière,
    tu soustrait 255,009033 par 255 (partie entière) = 0,009033
    et tu divise par 1000 et aisie de suite

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Pour ceux qui aiment pas les maths, ce serait plus facile avec une String qu'on découperait en trois String de longueur trois chacune (en fait : ça devrait être une String et pas un int. Parce qu'un int ne peut pas représenter "bleu" comme 000255000 mais juste 255000. C'est assez mauvais.)

    Mais sinon ouais : juste prendre le quotient et le reste en divisant par 1.000.000, puis pareil sur le reste en divisant par 1.000

    C'est pas compliqué.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 7
    Par défaut
    Des constantes à mettre quelque part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    final byte RED = 16;
    final byte GREEN = 8;
    final byte BLUE = 0;
    Mes trois couleurs séparées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    final int r = 128;
    final int g = 200;
    final int b = 23;
    encoder une couleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final int clr = (r << RED) + (g << GREEN) + (b << BLUE);
    Décoder une couleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    final int readR = clr >> RED & 0xff;
    final int readG = clr >> GREEN & 0xff;
    final int readB = clr >> BLUE & 0xff;
    VIVE LES OPÉRATIONS BINAIRES!!

    l'opérateur >> fait un décalage de bits vers la droite d'un nombre de positions données (l'opérateur << fait l'inverse)
    l'opérateur & fait un ET binaire -> 00101 & 10100 = 00100

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ouais j'ai déjà dit que c'est comme ça que ça marche, mais c'est pas ce qu'elle demande.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut
    Merci à vous tous pour vos réponse, c'est bon ça marche

    InfoStd

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

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 13h15
  2. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  3. Problème de conversion 3DS->.X
    Par JBernn dans le forum DirectX
    Réponses: 5
    Dernier message: 08/04/2004, 19h08
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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