Полупрозрачные цвета в Java через файлы свойств - PullRequest
4 голосов
/ 03 февраля 2010

Можно ли указать цвет в файле свойств, который имеет альфа-компонент? Когда я помещаю шестнадцатеричное число в файл свойств, который имеет альфа-канал, альфа игнорируется. Я заметил, что метод декодирования строки говорит: «Преобразует строку в целое число и возвращает указанный непрозрачный цвет.», И что единственный конструктор с одним аргументом это принимает int или шестнадцатеричное число, также говорит, что это непрозрачный цвет. Какова лучшая практика в этом отношении?

Альтернативы, которые я вижу, должны иметь что-то вроде

component.color.red=128
component.color.green=25
component.color.blue=54
component.color.alpha=244

или

component.color=128_25_54_244

, а затем вручную разбить строку на составляющие ее компоненты RGBA. Ни одно из этих решений не выглядит для меня очень привлекательным.

Я помню, однажды я видел проект альтернативных свойств, я думаю, для swingx, в котором была улучшена поддержка цветов. Кто-нибудь знает, что это было, и может ли это решить мою проблему?

EDIT:

Как я уже сказал в комментариях к одному из постов, я хочу найти решение, в котором я могу указывать цвета любыми способами, которые мне нужны в файле свойств (шестнадцатеричное для непрозрачных цветов, целое число со знаком для полупрозрачного) и не нужно изменять исходный код, который занимается интерпретацией пар ключ / значение для цвета.

Второе редактирование: Библиотека, о которой я говорил, это Fuse , которая представляет собой интегрированную среду для программирования GUI.

Ответы [ 3 ]

3 голосов
/ 11 февраля 2010

Самый простой способ - сохранить их все как ARGB, затем вы можете анализировать и передавать напрямую. (Добавьте FF, если это непрозрачный цвет). Репост как ответ:)

2 голосов
/ 03 февраля 2010

Сохраните цвет как полный 32-битный тип int (используйте Color.getRGB () ) и восстановите цвет, используя Color (int, true)

Это затруднит редактирование файлов свойств вручную, так как вы увидите числа вроде

somecolor = -123875123

Более забавный пример кода с выводом

public static void main(String[] args)
{
    Color r = Color.red;
    int ir = r.getRGB();
    Color nr = new Color(ir, true);
    System.out.println(r + ":" + r.getAlpha() + ", " + ir + ", " + nr + ":" + nr.getAlpha());

    Color c = new Color(1.0f, 0.5f, 1.0f, 0.5f);
    int ic = c.getRGB();
    Color nc = new Color(ic, true);
    System.out.println(c + ":" + c.getAlpha() + ", " + ic + ", " + nc + ":" + nc.getAlpha());
}

выход

java.awt.Color[r=255,g=0,b=0]:255, -65536, java.awt.Color[r=255,g=0,b=0]:255
java.awt.Color[r=255,g=128,b=255]:128, -2130738945, java.awt.Color[r=255,g=128,b=255]:128
1 голос
/ 03 февраля 2010

Как насчет конструктора Color (int rgb, boolean hasAlpha) .

В нем говорится, что я возьму альфу с того же числа, которое может работать для вас, просто не забывайте всегда устанавливать его в true, а для непрозрачных цветов используйте 255

...