Domanda

Il mio obiettivo con questo algoritmo su cui sto lavorando è produrre una progressione del colore da alcuni colori forniti. Per progressione del colore intendo creare l'effetto "dissolvenza" tra due colori (colore A, colore B) e memorizzare ogni valore di colore (tupla (R, G, B)) in mezzo.

Ad esempio, se ciò che viene fornito è A = (0,0,0) total black e B = (255,255,255) total white, la risultante della progressione sarebbe:

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

In modo che all'inizio otteniamo il bianco e che si trasformi progressivamente in nero. È, ovviamente, molto facile con il bianco e il nero (basta aumentare RGB di uno ogni passaggio per 255 volte). Ma cosa succede se voglio eseguire questa procedura con due colori arbitrari, come A= (180,69,1) e B= (233,153,0) ??

NOTA IMPORTANTE: se con esadecimale (o qualsiasi altro tipo di notazione a colori) fosse più facile da ottenere, potrei lavorare anche con quello, basta specificare di che tipo è (tieni presente che sto lavorando su PIL (Python Imaging Library), quindi se è compatibile con quello sto bene)

Ovviamente deve essere una distribuzione il più uniforme possibile, la progressione deve essere omogenea.

Ho bisogno di capire questo algoritmo in modo da poterlo usare nel mio generatore di frattali (Mandelbrot Set, google se vuoi), quindi è importante che la progressione sia il più morbida possibile, senza intoppi.

Grazie in anticipo.

È stato utile?

Soluzione

Converti le tue coordinate RGB in HSL o HSV e passale attraverso, riconvertendole in RGB lungo il percorso.

Altri suggerimenti

Interpolare i valori RGB in modo indipendente.Vedi questo thread .

Raccomando la stessa domanda di Jim Clay ma letta da all'inizio .oppure consulta Wikipedia relativa all ' interpolazione .

La mia risposta alla domanda SO intitolata Intervallo valori a pseudocolor potrebbe esserti utile perché mostra un modo per generare una sfumatura di colore specifica (il nome comune di ciò che hai definito progressione del colore).

In genere è possibile interpolare tra due colori qualsiasi in qualsiasi spazio colore calcolando la differenza, o valore delta, tra i componenti di ciascun colore, quindi dividerli per il numero di passaggi intermedi desiderati per ottenere una quantità delta frazionaria per componente applicare dopo ogni passaggio.

Quindi, a partire dal valore di ciascuna delle componenti del primo colore, la quantità frazionaria corrispondente può essere aggiunta ripetutamente per determinare ogni colore del passaggio intermedio. In alternativa, l'errore aritmetico inerente a tale approccio può essere ridotto aggiungendo invece (step_number/total_steps) * fractional_delta ai valori dei componenti del colore iniziale del colore iniziale.

Credo che questo sia ciò che dice anche @Jim Clay nella sua risposta. Se desideri un codice di esempio, dillo in un commento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top