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

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

Ответы [ 16 ]

0 голосов
/ 27 марта 2018

Вот еще одна более быстрая версия, которая поддерживает версии RGBA:

public static int hexToIntColor(String hex){
    int Alpha = Integer.valueOf(hex.substring(0, 2), 16);
    int Red = Integer.valueOf(hex.substring(2, 4), 16);
    int Green = Integer.valueOf(hex.substring(4, 6), 16);
    int Blue = Integer.valueOf(hex.substring(6, 8), 16);
    Alpha = (Alpha << 24) & 0xFF000000;
    Red = (Red << 16) & 0x00FF0000;
    Green = (Green << 8) & 0x0000FF00;
    Blue = Blue & 0x000000FF;
    return Alpha | Red | Green | Blue;
}
0 голосов
/ 10 января 2018

Если вы не хотите использовать AWT Color.decode, просто скопируйте содержимое метода:

int i = Integer.decode("#FFFFFF");
int[] rgb = new int[]{(i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF};

Integer.decode обрабатывает # или 0x, в зависимости от того, как отформатирована ваша строка

0 голосов
/ 25 марта 2015

На днях я решил похожую проблему и счел удобным преобразовать шестнадцатеричную строку цвета в массив int [alpha, r, g, b]:

 /**
 * Hex color string to int[] array converter
 *
 * @param hexARGB should be color hex string: #AARRGGBB or #RRGGBB
 * @return int[] array: [alpha, r, g, b]
 * @throws IllegalArgumentException
 */

public static int[] hexStringToARGB(String hexARGB) throws IllegalArgumentException {

    if (!hexARGB.startsWith("#") || !(hexARGB.length() == 7 || hexARGB.length() == 9)) {

        throw new IllegalArgumentException("Hex color string is incorrect!");
    }

    int[] intARGB = new int[4];

    if (hexARGB.length() == 9) {
        intARGB[0] = Integer.valueOf(hexARGB.substring(1, 3), 16); // alpha
        intARGB[1] = Integer.valueOf(hexARGB.substring(3, 5), 16); // red
        intARGB[2] = Integer.valueOf(hexARGB.substring(5, 7), 16); // green
        intARGB[3] = Integer.valueOf(hexARGB.substring(7), 16); // blue
    } else hexStringToARGB("#FF" + hexARGB.substring(1));

    return intARGB;
}
0 голосов
/ 12 марта 2015

Многие из этих решений работают, но это альтернатива.

String hex="#00FF00"; // green
long thisCol=Long.decode(hex)+4278190080L;
int useColour=(int)thisCol;

Если вы не добавите 4278190080 (# FF000000), цвет имеет альфа 0 и не будет отображаться.

0 голосов
/ 21 августа 2013

Чтобы уточнить ответ @xhh, вы можете добавить красный, зеленый и синий, чтобы отформатировать строку как «rgb (0,0,0)», прежде чем возвращать ее.

/**
* 
* @param colorStr e.g. "#FFFFFF"
* @return String - formatted "rgb(0,0,0)"
*/
public static String hex2Rgb(String colorStr) {
    Color c = new Color(
        Integer.valueOf(hexString.substring(1, 3), 16), 
        Integer.valueOf(hexString.substring(3, 5), 16), 
        Integer.valueOf(hexString.substring(5, 7), 16));

    StringBuffer sb = new StringBuffer();
    sb.append("rgb(");
    sb.append(c.getRed());
    sb.append(",");
    sb.append(c.getGreen());
    sb.append(",");
    sb.append(c.getBlue());
    sb.append(")");
    return sb.toString();
}
0 голосов
/ 09 ноября 2010

Шестнадцатеричные цветовые коды уже RGB. Формат: # RRGGBB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...