2010-08-31 36 views
57

En mi aplicación Java, pude obtener el valor JButton de color en términos de valores Rojo, Verde, Azul; He almacenado estos valores en tres enteros.Convertir un valor de color RGB en hexadecimal

Cómo convertir valores RGB en el valor hexadecimal equivalente?

Ejemplo de que al igual que en este formato #0033fA

+4

No existe el valor hexadecimal. Hay una representación hexadecimal *. * – EJP

Respuesta

142

Usted puede utilizar

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

uso de capital de X si desea que sus hexagonales cifras resultantes a ser capitalizadas (#FFFFFF vs #ffffff).

+1

y este es el camino de regreso: http://stackoverflow.com/a/4129692/1761622 – Mikescher

+0

Gracias @mhshams –

12
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; 
+0

Esta respuesta falla en el caso de que los valores rojos o verdes sean cero (un ejemplo es 'Color.BLUE', que emite' # 0ff' porque & 'el valor RGB de los resultados de Color.BLUE en '256' en la base 10, que es' ff' en hexadecimal). Una solución es usar un ciclo 'while' en lugar de un enunciado if al pretender ceros. – Vulcan

35

A un trazador de líneas, pero sin String.Format:

Color your_color = Color.BLACK; 

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

se puede añadir un .toUpperCase() si desea cambiar a mayúsculas.

+6

Tenga en cuenta que este método se rompe si su color tiene un valor alfa <16 (es decir, su representación ARGB hexadecimal comienza con 0). – ARRG

1

Esta es una versión adaptada de la respuesta dada por Vivien Barousse con la actualización desde Vulcan aplicada. En este ejemplo, utilizo controles deslizantes para recuperar dinámicamente los valores RGB de tres controles deslizantes y mostrar ese color en un rectángulo. Luego, en el método toHex() utilizo los valores para crear un color y mostrar el código de color Hex respectivo.

Este ejemplo no incluye las restricciones adecuadas para GridBagLayout. Aunque el código funcionará, la pantalla se verá extraña.

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 enorme gracias tanto a Vivien y Vulcano. Esta solución funciona perfectamente y fue súper simple de implementar.

Cuestiones relacionadas