Как конвертировать hex в rgb, используя Java? - PullRequest
86 голосов
/ 09 ноября 2010

Как я могу преобразовать шестнадцатеричный цвет в код RGB в Java?В основном в Google приведены примеры того, как преобразовать RGB в шестнадцатеричный код.

Ответы [ 16 ]

224 голосов
/ 19 сентября 2011

На самом деле, есть более простой (встроенный) способ сделать это:

Color.decode("#FFCCEE");
151 голосов
/ 09 ноября 2010

Полагаю, это должно быть сделано:

/**
 * 
 * @param colorStr e.g. "#FFFFFF"
 * @return 
 */
public static Color hex2Rgb(String colorStr) {
    return new Color(
            Integer.valueOf( colorStr.substring( 1, 3 ), 16 ),
            Integer.valueOf( colorStr.substring( 3, 5 ), 16 ),
            Integer.valueOf( colorStr.substring( 5, 7 ), 16 ) );
}
37 голосов
/ 09 ноября 2010
public static void main(String[] args) {
    int hex = 0x123456;
    int r = (hex & 0xFF0000) >> 16;
    int g = (hex & 0xFF00) >> 8;
    int b = (hex & 0xFF);
}
23 голосов
/ 12 апреля 2013

Для Android разработки, я использую:

int color = Color.parseColor("#123456");
5 голосов
/ 03 мая 2017

Вот версия, которая поддерживает версии RGB и RGBA:

/**
 * Converts a hex string to a color. If it can't be converted null is returned.
 * @param hex (i.e. #CCCCCCFF or CCCCCC)
 * @return Color
 */
public static Color HexToColor(String hex) 
{
    hex = hex.replace("#", "");
    switch (hex.length()) {
        case 6:
            return new Color(
            Integer.valueOf(hex.substring(0, 2), 16),
            Integer.valueOf(hex.substring(2, 4), 16),
            Integer.valueOf(hex.substring(4, 6), 16));
        case 8:
            return new Color(
            Integer.valueOf(hex.substring(0, 2), 16),
            Integer.valueOf(hex.substring(2, 4), 16),
            Integer.valueOf(hex.substring(4, 6), 16),
            Integer.valueOf(hex.substring(6, 8), 16));
    }
    return null;
}
4 голосов
/ 09 ноября 2010

шестнадцатеричный код цвета # RRGGBB

RR, GG, BB - шестнадцатеричные значения в диапазоне 0-255

Давайте назовем RR XY, где X и Y - шестнадцатеричный символ 0-9A-F, A = 10, F = 15

Десятичное значение: X * 16 + Y

Если RR = B7, десятичное число для B равно 11, поэтому значение равно 11 * 16 + 7 = 183

public int[] getRGB(String rgb){
    int[] ret = new int[3];
    for(int i=0; i<3; i++){
        ret[i] = hexToInt(rgb.charAt(i*2), rgb.charAt(i*2+1));
    }
    return ret;
}

public int hexToInt(char a, char b){
    int x = a < 65 ? a-48 : a-55;
    int y = b < 65 ? b-48 : b-55;
    return x*16+y;
}
3 голосов
/ 15 апреля 2014

Вы можете сделать это просто, как показано ниже:

 public static int[] getRGB(final String rgb)
{
    final int[] ret = new int[3];
    for (int i = 0; i < 3; i++)
    {
        ret[i] = Integer.parseInt(rgb.substring(i * 2, i * 2 + 2), 16);
    }
    return ret;
}

Например

getRGB("444444") = 68,68,68   
getRGB("FFFFFF") = 255,255,255
1 голос
/ 11 августа 2018

Для JavaFX

import javafx.scene.paint.Color;

.

Color whiteColor = Color.valueOf("#ffffff");
1 голос
/ 09 ноября 2010

Преобразуйте его в целое число, а затем разделите его дважды на 16, 256, 4096 или 65536 в зависимости от длины исходной шестнадцатеричной строки (3, 6, 9 или 12 соответственно).

0 голосов
/ 24 января 2019

Для сокращенного шестнадцатеричного кода, такого как #fff или # 000

int red = colorString.charAt(1) == '0' ? 0 : 255;
int blue = colorString.charAt(2) == '0' ? 0 : 255;
int green = colorString.charAt(3) == '0' ? 0 : 255;
Color.rgb(red, green,blue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...