Как преобразовать цвет RGB в шестнадцатеричный в Java - PullRequest
0 голосов
/ 14 марта 2020

Я искал везде, но не смог найти подходящего решения.

У меня есть цвет RGB, который я хочу преобразовать в этот формат: 0xffffffff

Много ответов преобразовать его в этот формат: #ffffff

Кто-нибудь знает, как преобразовать его в этот формат (0xffffffff)?

РЕДАКТИРОВАТЬ: Решено! Я действительно нуждался в int, но я случайно сказал string, woops ie. Кажется, теперь работает, спасибо!

Фрагмент:

double frequency = .3;
double r = 255;
double g = 255;
double b = 255;
for (int i = 0; i < 32; ++i)
{
    // I am trying to make a rainbow, hence this for loop and the Math.sin
    r = Math.sin(frequency*i + 0) * 127 + 128;
    g = Math.sin(frequency*i + 2) * 127 + 128;
    b = Math.sin(frequency*i + 4) * 127 + 128;
    int red = (int)r;
    int green = (int)g;
    int blue = (int)b;

    // converting, outputs a string

    System.out.println(result);
}

Ответы [ 3 ]

2 голосов
/ 14 марта 2020

В случае, если вы хотите, чтобы число не как string, а как int:


0xRRGGBB

RR, GG, BB каждый представлял значение от 0 до 255 (значения RGB). Каждый ди git шестнадцатеричного числа может иметь значения в диапазоне от 0 до 16, это означает, что вам нужно будет хранить числа до 16 ^ 6 = 16.777.216‬ -> тип данных int должен быть в порядке.
Тогда просто сделайте ваш int:

int hexval = red * 65536 + green * 256 + blue;


При желании вы можете вывести его:
System.out.printf("0x%06X\n", hexval);
0 голосов
public static int colorToInt(int r, int g, int b) {
    int result = 0;
    result += r;
    result = result << 8;
    result += g;
    result = result << 8;
    result += b;

    return result;
}

Вот пример:

System.out.println(0xffffff); // 16777215
System.out.println(colorToInt(255, 255, 255)); // 16777215

Repl: https://repl.it/repls/IrritatingTwinConsulting.

Эта функция принимает int вместо double, но я не Не думаю, что это проблема. Надеюсь, я правильно понял ваш вопрос.

0 голосов
/ 14 марта 2020
public class Main {
    public static void main(String[] args) {
        double frequency = .3;
        int red = (int) (Math.sin(frequency * 10 + 0) * 127 + 128);
        int green = (int) (Math.sin(frequency * 10 + 2) * 127 + 128);
        int blue = (int) (Math.sin(frequency * 10 + 4) * 127 + 128);
        int result = Integer.parseInt(String.format("%02x%02x%02x", red, green, blue), 16);

        System.out.println("Decimal representation: " + result);
        System.out.println("Hexdecimal representation: " + String.format("0x%06x", result));
    }
}

Выход:

Decimal representation: 9504467
Hexdecimal representation: 0x9106d3
...