java - hexadecimal - rgb to hex google
Convertir un valor de color RGB a un hexadecimal (4)
En mi aplicación Java, pude obtener el valor del color JButton
en términos de valores de Rojo, Verde, Azul; He almacenado estos valores en tres enteros.
¿Cómo convertir valores RGB en el valor hexadecimal equivalente?
Ejemplo de eso me gusta en este formato #0033fA
Esta es una versión adaptada de la respuesta dada por con la actualización de Vulcan aplicada. En este ejemplo, uso los 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 (), uso los valores para crear un color y mostrar el código de color Hex respectivo.
Este ejemplo no incluye las restricciones adecuadas para el GridBagLayout. Aunque el código funcionará, la pantalla tendrá un aspecto extraño.
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;
}
}
Muchísimas gracias a Vivien y Vulcan. Esta solución funciona perfectamente y fue super simple de implementar.
Puedes usar
String hex = String.format("#%02x%02x%02x", r, g, b);
Use las X mayúsculas si desea que los dígitos hexadecimales resultantes se escriban en mayúsculas ( #FFFFFF
vs. #ffffff
).
Un trazador de líneas pero sin String.format:
Color your_color = Color.BLACK;
String hex = "#"+Integer.toHexString(your_color.getRGB()).substring(2);
Puede agregar un .toUpperCase()
si desea cambiar a mayúsculas.
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;