it-swarm.com.ru

Java - Как преобразовать Color.toString () в цвет?

Чтобы сохранить цветовые атрибуты графического объекта в моем приложении, я сохранил строковое представление этого цвета в файле данных. Например, для красного я сохраняю: Java.awt.Color[r=255,g=0,b=0]. Как я могу преобразовать это строковое представление в цвет, чтобы я мог использовать его снова после загрузки моего файла данных?

Спасибо.

10
Amokrane Chentir

Использование toString() "может варьироваться в зависимости от реализации." Вместо этого сохраните String.valueOf(color.getRGB()) для последующей реконструкции.

10
trashgod

Вы можете использовать getRGB() вместо toString(). Ты можешь позвонить

String colorS = Integer.toString(myColor.getRGB());

Тогда вы можете позвонить

Color c = new Color(Integer.parseInt(colorS));

16
iter

Из документации Color#toString

Возвращает строковое представление этого Color. Этот метод предназначен для использования только в целях отладки. Содержимое и формат возвращаемой строки могут различаться в разных реализациях. Возвращенная строка может быть пустой, но не может быть null.

Другими словами, я бы не полагался на возможность обратного преобразования строки в Color. Однако, если вы настаиваете на этом, вы можете попытаться разобрать числа в строке и надеяться, что это будет работать без каких-либо гарантий.

Нечто подобное , кажется, работает для меня сейчас :

    Scanner sc = new Scanner("Java.awt.Color[r=1,g=2,b=3]");
    sc.useDelimiter("\\D+");
    Color color = new Color(sc.nextInt(), sc.nextInt(), sc.nextInt());

Однако я не рекомендую делать это на самом деле.

4
polygenelubricants

Я предлагаю вам взглянуть на встроенную технологию сериализации Java. (Замечу, что Color реализует Serializable.)

3
crazyscot

Используйте метод getRGB () для получения int-представления Color, затем вы сохраняете значение int и воссоздаете Color, используя это значение. Нет необходимости в разборе.

3
camickr

Проще всего переосмыслить способ хранения строкового представления. Избавьтесь от всей маркировки и просто сохраните красный как строку "0xFF0000". Затем вы можете легко проанализировать эту строку, чтобы получить единственное значение для rgb, и отправить его в конструктор Color.

Альтернатива состоит в том, чтобы проанализировать более сложную строку, поскольку вы сейчас сохраняете ее "Java.awt.Color [r = 255, g = 0, b = 0]".

Вы можете увидеть конструкторы для Color здесь: http://Java.Sun.com/javase/6/docs/api/ (поиск "все классы" для Color).

Питер

2
Peter vdL

Не используйте toString(). Используйте getRGB()/new Color(rgb), чтобы сохранить/восстановить значение цвета.

2
Bozho

Ответ Стефана помог мне в этом. Однако я обнаружил, что мне нужно добавить "true" в синтаксис, чтобы восстановить цвет.

// convert to string
String colorS = Integer.toString(myColor.getRGB());

// restore colour from string
Color c = new Color(Integer.parseInt(colorS), true);
0
Christian