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;

}
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top