Джава качели. Как изменить интенсивность цвета с черного на белый?

Я не вижу, как изменить цвет только с черного на белый. Оттенки серого.

Мой пример. У меня есть значения от 0 до 100.

Их представление такое:

0 – черный

100 – белый

Я рисую JComponent, и всякий раз, когда мне нужно изменить цвет, я должен позвонить

g.setColor(Color);

Но как сказать ему менять цвет только с черного на белый, в зависимости от моего номера (чем больше номер, тем белее цвет)? Как манипулировать RGB?


person vale4674    schedule 08.11.2010    source источник


Ответы (3)


Конечно, нет никакого изменения цвета от черного к белому как таковому, за исключением постепенно более светлых оттенков серого.

Итак, просто используйте равные значения RGB, рассматривая 0–100 как процент от 255.

Например, 50% — это RGB 128 128 128 (хотя в зависимости от округления вы можете получить 127 127 127).

Выражение для перехода от процентного значения к 0-255:

rgb=(pct*255)/100;
person Lawrence Dol    schedule 08.11.2010

Color API имеет значения HSB, которые могут показаться вам более удобными.

Вы также можете использовать цвета HSL. Проверьте вкладку «Яркость», когда вы начинаете с черного или белого цвета.

person camickr    schedule 08.11.2010
comment
Вопрос конкретно задан Как манипулировать RGB?. - person ; 08.11.2010
comment
@pouncep: HSB и HSL - полезные альтернативы для рассмотрения. Например, в HSB установка h=0, s=0 и b=0..255 дает 256 равноотстоящих оттенков серого. См. также download.oracle.com/javase/tutorialJWS/uiswing/ компоненты/ex6/ - person trashgod; 08.11.2010
comment
Основной вопрос был о шкале серого. Часто люди не знают альтернатив. Я стараюсь предлагать разные подходы, и тогда люди могут выбрать подход, который им понятен. Для многих людей концепция изменения яркости (в HSB) или светимости (в HSL) имеет больше смысла, чем изменение всех трех значений RGB. - person camickr; 08.11.2010
comment
+1: я согласен с camkickr и сразу вижу некоторые места, где это может помочь мне с частью моего кода. Я признаюсь, что так долго был заперт в мышлении RGB, что не часто рассматриваю альтернативы HSB и HSL. - person Lawrence Dol; 08.11.2010
comment
На самом деле, я только что написал код изменения оттенка для цветов, где HSB или HSL будут работать намного лучше. Добавление элемента списка дел, чтобы изучить это сейчас. - person Lawrence Dol; 08.11.2010

Пока значения равны в rgb, у вас есть серый цвет.

so

g.setColor(new Color(0, 0, 0);

белый.

g.setColor(new Color(255,255,255);

черный

g.setColor(new Color(128,128,128);

равномерная смесь белого и черного.

person austinbv    schedule 08.11.2010