Как конвертировать RGB в HEX (java)? [Дубликат]

вы ищете global

Обратите внимание, однако, что в модулях ничто никогда не подвергается этому уровню

65
задан Nathan 10 February 2016 в 23:24
поделиться

4 ответа

Вы можете использовать

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

Использовать капитал X, если вы хотите, чтобы ваши итоговые шестнадцатеричные цифры были заглавные (#FFFFFF vs. #ffffff).

153
ответ дан Camilo Sampedro 15 August 2018 в 18:39
поделиться

Это адаптированная версия ответа, заданного Vivien Barousse , с обновлением из Vulcan . В этом примере я использую ползунки для динамического возврата значений RGB из трех ползунков и отображения этого цвета в прямоугольнике. Затем в методе toHex () я использую значения для создания цвета и отображения соответствующего цветового кода Hex.

В этом примере не указаны правильные ограничения для GridBagLayout. Хотя код будет работать, дисплей будет выглядеть странно.

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

Огромное спасибо и Вивьен, и Вулкану. Это решение работает отлично и было очень просто реализовать.

1
ответ дан Community 15 August 2018 в 18:39
поделиться

Один liner, но без String.format:

Color your_color = Color.BLACK;

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

Вы можете добавить .toUpperCase(), если хотите перейти на заглавные буквы.

37
ответ дан Lonzak 15 August 2018 в 18:39
поделиться
  • 1
    Имейте в виду, что этот метод нарушен, если ваш цвет имеет альфа-значение & lt; 16 (т. Е. Его шестнадцатеричное представление ARGB начинается с 0). – ARRG 4 September 2014 в 16:34
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;
12
ответ дан Ruslan López 15 August 2018 в 18:39
поделиться
  • 1
    Этот ответ терпит неудачу в случае, когда красные или зеленые значения равны нулю (например, Color.BLUE, который выводит #0ff, потому что & amp; 'значение RGB для Color.BLUE приводит к 256 в базе 10, что ff в шестнадцатеричном формате). Исправление состоит в том, чтобы использовать цикл while, а не оператор if, когда предваряют нули. – Vulcan 19 May 2015 в 08:14
Другие вопросы по тегам:

Похожие вопросы: