Pergunta

Meu objetivo com este algoritmo no qual estou trabalhando é gerar uma progressão de cores a partir de algumas cores fornecidas. Por progressão de cor, quero dizer criar o efeito de "esmaecimento" entre duas cores (cor A, cor B) e armazenar cada valor de cor ((R, G, B) tupla) entre elas.

Por exemplo, se o que for fornecido for um A = (0,0,0) preto total e um B = (255,255,255) branco total, a progressão resultante será:

P = ((0,0,0),(1,1,1),(2,2,2), .... ,(253,253,253),(254,254,254),(255,255,255)

Para que primeiro fique branco e ele se torne preto progressivamente. É claro que é muito fácil com branco e preto (basta aumentar o RGB em um a cada passo 255 vezes). Mas e se eu quiser fazer esse procedimento com duas cores arbitrárias, como A= (180,69,1) e B= (233,153,0) ??

NOTA IMPORTANTE: Se com hexadecimal (ou qualquer outro tipo de notação de cor) fosse mais fácil de conseguir, eu poderia trabalhar com isso também, basta especificar qual é o tipo (leve em consideração que estou trabalhando em PIL (Python Biblioteca de imagens), então, se for compatível com isso, estou bem)

Obviamente, deve haver uma distribuição o mais uniforme possível, a progressão deve ser homogênea.

Preciso descobrir esse algoritmo para poder usá-lo em meu Gerador de Fractal (Conjunto Mandelbrot, pesquise no Google se quiser), por isso é importante que a progressão seja o mais suave possível, sem soluços.

Agradecemos antecipadamente.

Foi útil?

Solução

Converta suas coordenadas RGB para HSL ou HSV e passe por elas, convertendo de volta para RGB ao longo do caminho.

Outras dicas

Gostaria apenas de interpolar os valores RGB de forma independente.Veja esta discussão .

Eu recomendo a mesma pergunta de Jim Clay, mas leia a parte superior .ou consulte a Wikipedia sobre interpolação .

Minha resposta à pergunta do SO intitulada Faixa de valores até pseudocolor pode ser útil para você porque mostra uma maneira de gerar um gradiente de cor específico (o nome comum do que você chama de progressão de cor).

Geralmente, você pode interpolar entre quaisquer duas cores em qualquer espaço de cor calculando a diferença, ou valor delta, entre os componentes de cada cor e, em seguida, dividi-los pelo número de etapas intermediárias desejadas para obter uma quantidade delta fracionária por componente para aplicar após cada etapa.

Então, partindo do valor de cada um dos componentes da primeira cor, a quantidade fracionária correspondente pode ser adicionada a ela repetidamente para determinar cada cor de etapa intermediária. Alternativamente, o erro aritmético inerente a essa abordagem pode ser reduzido adicionando (step_number/total_steps) * fractional_delta aos valores iniciais do componente de cor da cor inicial.

Eu acredito que é isso que @Jim Clay também está dizendo em sua resposta. Se você quiser um exemplo de código, diga-o em um comentário.

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