Pergunta

Vamos considerar o seguinte cenário: uma função que pode gerar cores de código de branco para vermelho, de branco para azul, do branco ao rosa, do branco ao laranja, etc

.

O código de cores é em formato RGB com valores de 0 a 255.

Todas as idéias? Você pode me dar o pseudocódigo ou link para tal algoritmo?

Foi útil?

Solução

Parece que você está depois linear interpolação - no seu caso, interpolação de branco para a cor especificada. Por exemplo, em C #:

public IEnumerable<Color> Interpolate(Color from, Color to, int steps)
{
    int range = steps-1; // Makes things a bit easier
    for (int i=0; i < steps; i++)
    {
        // i is the proportion of the "to" colour to use.
        // j is the proportion of the "from" colour to use.

        int j = range - i;
        int r = ((from.R * j) + (to.R * i)) / range;
        int g = ((from.G * j) + (to.G * i)) / range;
        int b = ((from.B * j) + (to.B * i)) / range;
        yield return new Color(r, g, b);
    }
}

Claro que existem outras maneiras de fazê-lo além de uma interpolação linear, mas é provável que seja o mais simples. Note-se que este fica complicado se você tem um monte de etapas ou valores maiores, porque você precisa considerar a possibilidade de estouro. Neste caso, você deve estar bem embora -. É improvável que você quer mais do que 256 degraus, e o valor máximo é 255, assim você não vai chegar perto dos limites da ints

EDIT: Como observado nos comentários, RGB pode muito bem não ser o melhor domínio em que a utilização de interpolação linear. Você pode ser melhor fora de converter o de / para valores RGB em HSL ou HSV , e fazer interpolação Essa. Isso pode ser fácil ou difícil dependendo da sua plataforma. O link para wikipedia na frase anterior dá fórmulas para os cálculos apropriados se eles não estão previstas para você.

Outras dicas

Algoritmo:

  1. Encontre o valor RGB para o branco
  2. Encontre o valor RGB para a outra cor (por exemplo, você menciona vermelho, azul, rosa, laranja)
  3. valores Calcular RGB cujos componentes RGB são aritmeticamente entre os componentes RGB de dois extremos

Por exemplo, se um extremo é (0,0,0) e o outro extremo é (0,255,255), então o valor a meio caminho entre estas duas cores é (0.128.128) ... eo valor que é um quarto do caminho entre esses dois valores é (0,64,64).

interpolação cores através de conhecidos, pontos específicos é frequentemente usado para a construção de esquemas de cores para representar graficamente os dados. Uma alternativa para uma fórmula de interpolação explícita é escolher um esquema de cores que tem algum projeto por trás de sua representação. Uma boa fonte de tal esquema um é ColorBrewer .

Mesmo se você precisa interpolate, a partir de um esquema de cores bem projetado poderia produzir resultados muito mais utilizáveis.

Comece com as duas cores que você quiser gradientes entre, e dividi-los em R, G e B partes.

Decida quantos "passos" que deseja desaparecer completamente.

Dividir a diferença entre o R, G e B partes com o número de passos. Você agora tem uma "diferença passo" para cada cor.

loop através de cada etapa e adicionar a diferença passo para o valor da cor uma vez para cada iteração. Rodada para inteiros do última coisa que você faz.

O que cores você quer mudar para? branco para vermelho seria apenas um caso de começando com 255 255 255 e diminuindo o segundo dois até que você tenha 255 0 0. azul seria manter o último valor e diminuindo para acabar com 0 0 255, etc

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