web-dev-qa-db-fra.com

comment convertir la couleur rgb en int en java

Paint.setColor attend un entier. Mais ce que j'ai est un objet Color. Je ne vois pas de color.getIntValue() en Java? Alors, comment je fais ça? Ce que je veux c'est quelque chose comme

public Something myMethod(Color rgb){
    myPaint.setColor(rgb.getIntValue());
    ...
}

Correction: Android.graphics.Color; Je pensais qu'avoir Android comme une des balises suffirait. Mais apparemment pas.

12
Cote Mounyo

Tout d’abord, Android.graphics.Color est une classe composée uniquement de méthodes statiques. Comment et pourquoi avez-vous créé un nouvel objet Android.graphics.Color? (Ceci est complètement inutile et l'objet lui-même ne stocke aucune donnée)

Mais de toute façon ... je vais supposer que vous utilisez un objet qui stocke réellement des données ...

Un entier est composé de 4 octets (en Java). En regardant la fonction getRGB () de l'objet Java Color standard, nous pouvons voir que Java associe chaque couleur à un octet de l'entier dans l'ordre ARGB (alpha-rouge-vert-bleu). Nous pouvons répliquer ce comportement avec une méthode personnalisée comme suit:

public int getIntFromColor(int Red, int Green, int Blue){
    Red = (Red << 16) & 0x00FF0000; //Shift red 16-bits and mask out other stuff
    Green = (Green << 8) & 0x0000FF00; //Shift Green 8-bits and mask out other stuff
    Blue = Blue & 0x000000FF; //Mask out anything not blue.

    return 0xFF000000 | Red | Green | Blue; //0xFF000000 for 100% Alpha. Bitwise OR everything together.
}

Cela suppose que vous puissiez récupérer les différentes composantes de couleur rouge, verte et bleue et que toutes les valeurs que vous avez transmises pour les couleurs sont comprises entre 0 et 255.

Si vos valeurs RVB sont sous la forme d’un pourcentage de flottement compris entre 0 et 1, envisagez la méthode suivante:

public int getIntFromColor(float Red, float Green, float Blue){
    int R = Math.round(255 * Red);
    int G = Math.round(255 * Green);
    int B = Math.round(255 * Blue);

    R = (R << 16) & 0x00FF0000;
    G = (G << 8) & 0x0000FF00;
    B = B & 0x000000FF;

    return 0xFF000000 | R | G | B;
}

Comme d'autres l'ont déjà dit, si vous utilisez un objet Java standard, utilisez simplement getRGB ();

Si vous décidez d'utiliser correctement la classe de couleurs Android, vous pouvez également effectuer les tâches suivantes:

int RGB = Android.graphics.Color.argb(255, Red, Green, Blue); //Where Red, Green, Blue are the RGB components. The number 255 is for 100% Alpha

ou

int RGB = Android.graphics.Color.rgb(Red, Green, Blue); //Where Red, Green, Blue are the RGB components.

comme d'autres l'ont dit ... (la deuxième fonction suppose 100% d'alpha)

Les deux méthodes font fondamentalement la même chose que la première méthode créée ci-dessus.

37
initramfs

Si vous développez pour Android, la méthode de Color pour cela est rgb (int, int, int) 

Donc, vous feriez quelque chose comme

myPaint.setColor(Color.rgb(int, int, int)); 

Pour récupérer les valeurs de couleur individuelles, vous pouvez utiliser les méthodes suivantes: 

Color.red(int color) 
Color.blue(int color) 
Color.green(int color) 

Reportez-vous à ce document pour plus d'informations

17
superdiazepam

Color a une méthode getRGB () qui renvoie la couleur sous la forme int.

6
chrylis

Vous voulez utiliser intvalue = Color.parseColor("#" + colorobject);

5
JoppeD

int color = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);

3
Amol Jindal

Vous pouvez déclarer une valeur dans color.xml et obtenir ainsi une valeur entière en appelant le code ci-dessous.

context.getColor(int resId);
1
TangQisen