2010-08-31 5 views
57

In meiner Java-Anwendung konnte ich den Wert JButton Farbe in Bezug auf Rot, Grün, Blau Werte erhalten; Ich habe diese Werte in drei ganzen Zahlen gespeichert.Konvertieren eines RGB-Farbwerts in ein Hexadezimal

Wie konvertiert man RGB-Werte in den entsprechenden hexadezimalen Wert?

Beispiel, dass wie in diesem Format #0033fA

+4

Es gibt keinen hexadezimalen Wert. Es gibt hexadezimale * Darstellung. * – EJP

Antwort

142

können Sie

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

Verwenden Kapital X verwenden, wenn Sie Ihre resultierenden hex-Ziffern wollen aktiviert werden (#FFFFFF vs. #ffffff).

+1

und das ist der Weg zurück: http://Stackoverflow.com/a/4129692/1761622 – Mikescher

+0

Dank @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

Diese Antwort schlägt fehl, wenn die roten oder grünen Werte Null sind (ein Beispiel ist 'Color.BLUE', das' # 0ff' ausgibt, weil der RGB-Wert von Color.BLUE Ergebnisse ergibt in "256" in der Basis 10, was "ff" in Hex ist. Eine Lösung besteht darin, eine while-Schleife anstelle einer if-Anweisung zu verwenden, wenn Nullen vorangestellt werden. – Vulcan

35

Ein Motto, aber ohne String.format:

Color your_color = Color.BLACK; 

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

Sie können eine .toUpperCase() hinzufügen, wenn Sie in Großbuchstaben wechseln wollen.

+6

Beachten Sie, dass diese Methode defekt ist, wenn Ihre Farbe einen Alpha-Wert <16 hat (dh seine hexadezimale ARGB-Darstellung beginnt mit 0). – ARRG

1

Dies ist eine angepasste Version der Antwort von Vivien Barousse mit dem Update von Vulcan angewendet. In diesem Beispiel verwende ich Schieberegler, um die RGB-Werte von drei Schiebereglern dynamisch zu retrieven und diese Farbe in einem Rechteck anzuzeigen. Dann verwende ich in der Methode toHex() die Werte, um eine Farbe zu erzeugen und den entsprechenden Hex-Farbcode anzuzeigen.

Dieses Beispiel enthält nicht die richtigen Einschränkungen für das GridBagLayout. Obwohl der Code funktioniert, wird das Display seltsam aussehen.

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; 
    } 
} 

Ein großes Dankeschön an beide Vivien und Vulcan. Diese Lösung funktioniert perfekt und war sehr einfach zu implementieren.