Java: Operações com cores (adicionar, subtrair)? - Cores em uma classe constante
Pergunta
Eu estou trabalhando com instâncias java.awt.Color
. Existe alguma maneira de fazer operações aritméticas em cores? Algo como rgb(20, 20, 20) + rgb(10, 200, 170) = rgb(30, 220, 190)
?
O que eu estou tentando fazer: Eu tenho uma interface gráfica que dispõe de uma mesa, onde se o usuário clica em uma célula, as outras células mudam de cor com base na sua relação com o selecionado. Eu estou procurando uma maneira de evitar difícil codificação quais são as cores de base, e na qual os valores de cores mudam.
Assim, a célula selecionada pode ser rgb(255, 0, 0)
, e tudo o mais pode ser entre rgb(0, 0, 0)
e rgb(0, 255, 0)
com base em seus valores. Estou pensando ... enums?
import java.awt.Color;
public enum ColorConstant {
SELECTED (new rgb(255, 0, 0), "Red"),
MAX_DISTANCE (new rgb(0, 255, 0), "Green")
private Color shade;
private ??? whichColorToModify;
}
Solução
Existem métodos Color.brighter e Color.darker.
Além disso, eu costumo escrever um pequeno métodos de utilidade para tais fins, como:
private static Color brightness(Color c, double scale) {
int r = Math.min(255, (int) (c.getRed() * scale));
int g = Math.min(255, (int) (c.getGreen() * scale));
int b = Math.min(255, (int) (c.getBlue() * scale));
return new Color(r,g,b);
}
Outras dicas
HSLColor pode ser o que você está procurando. Ele permite que você ajuste o tom / tom de uma cor facilmente.