web-dev-qa-db-fra.com

Convertir une valeur de couleur RVB en chaîne hexadécimale

Dans mon Java application, j’ai pu obtenir le Color d’un JButton en rouge, vert et bleu; j’ai stocké ces valeurs dans trois ints.

Comment convertir ces valeurs RVB en un String contenant la valeur hexadécimale équivalente?

Un exemple serait "#0033fA"

74
Lalchand

Vous pouvez utiliser

String hex = String.format("#%02x%02x%02x", r, g, b);  

Utilisez X majuscules si vous voulez que les chiffres hexadécimaux résultants soient en majuscule (#FFFFFF contre. #ffffff).

170
mhshams

Un doublure mais sans String.format:

Color your_color = Color.BLACK;

String hex = "#"+Integer.toHexString(your_color.getRGB()).substring(2);

Vous pouvez ajouter une .toUpperCase() si vous souhaitez passer aux majuscules.

Notez que ARRG est juste - à utiliser uniquement pour les couleurs non transparentes.

if(your_color.getAlpha() >= 16){
   String hex = "#"+Integer.toHexString(your_color.getRGB()).substring(2);
}
else{...}
41
Lonzak
Random ra = new Random();
int r, g, b;
r=ra.nextInt(255);
g=ra.nextInt(255);
b=ra.nextInt(255);
Color color = new Color(r,g,b);
String hex = Integer.toHexString(color.getRGB() & 0xffffff);
if (hex.length() < 6) {
    hex = "0" + hex;
}
hex = "#" + hex;
13
Vivien Barousse

Ceci est une version adaptée de la réponse donnée par Vivien Barousse avec la mise à jour de Vulcan appliquée. Dans cet exemple, j'utilise des curseurs pour récupérer dynamiquement les valeurs RVB de trois curseurs et afficher cette couleur dans un rectangle. Ensuite, dans la méthode toHex (), j'utilise les valeurs pour créer une couleur et afficher le code de couleur Hex correspondant.

Cet exemple n'inclut pas les contraintes appropriées pour GridBagLayout. Bien que le code fonctionne, l'affichage sera étrange.

public class HexColor
{

  public static void main (String[] args)
  {
   JSlider sRed = new JSlider(0,255,1);
   JSlider sGreen = new JSlider(0,255,1);
   JSlider sBlue = new JSlider(0,255,1);
   JLabel hexCode = new JLabel();
   JPanel myPanel = new JPanel();
   GridBagLayout layout = new GridBagLayout();
   JFrame frame = new JFrame();

   //set frame to organize components using GridBagLayout 
   frame.setLayout(layout);

   //create gray filled rectangle 
   myPanel.paintComponent();
   myPanel.setBackground(Color.GRAY);

   //In practice this code is replicated and applied to sGreen and sBlue. 
   //For the sake of brevity I only show sRed in this post.
   sRed.addChangeListener(
         new ChangeListener()
         {
             @Override
             public void stateChanged(ChangeEvent e){
                 myPanel.setBackground(changeColor());
                 myPanel.repaint();
                 hexCode.setText(toHex());
         }
         }
     );
   //add each component to JFrame
   frame.add(myPanel);
   frame.add(sRed);
   frame.add(sGreen);
   frame.add(sBlue);
   frame.add(hexCode);
} //end of main

  //creates JPanel filled rectangle
  protected void paintComponent(Graphics g)
  {
      super.paintComponent(g);
      g.drawRect(360, 300, 10, 10);
      g.fillRect(360, 300, 10, 10);
  }

  //changes the display color in JPanel
  private Color changeColor()
  {
    int r = sRed.getValue();
    int b = sBlue.getValue();
    int g = sGreen.getValue();
    Color c;
    return  c = new Color(r,g,b);
  }

  //Displays hex representation of displayed color
  private String toHex()
  {
      Integer r = sRed.getValue();
      Integer g = sGreen.getValue();
      Integer b = sBlue.getValue();
      Color hC;
      hC = new Color(r,g,b);
      String hex = Integer.toHexString(hC.getRGB() & 0xffffff);
      while(hex.length() < 6){
          hex = "0" + hex;
      }
      hex = "Hex Code: #" + hex;
      return hex;
  }
}

Un grand merci à Vivien et à Vulcan. Cette solution fonctionne parfaitement et était très simple à mettre en œuvre.

1
AlyssaFox