Domanda

Si consideri il seguente scenario:. Una funzione in grado di generare codice colori dal bianco al rosso, dal bianco al blu, dal bianco al rosa, dal bianco all'arancio, etc

Il codice di colori è in formato RGB con valori da 0 a 255.

Tutte le idee? Potete darmi il pseudocodice o un collegamento a tale algoritmo?

È stato utile?

Soluzione

Sembra che tu stai dopo interpolazione lineare - nel vostro caso, interpolando dal bianco al il colore specificato. Ad esempio, in 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);
    }
}

Naturalmente ci sono altri modi per farlo oltre ad un'interpolazione lineare, ma questo è probabile che sia il più semplice. Si noti che questo diventa difficile se si dispone di un sacco di passi o valori più grandi, perché è necessario considerare la possibilità di troppo pieno. In questo caso si dovrebbe essere a posto anche se -. Si è improbabile che vogliono più di 256 passi, e il valore massimo è 255, in modo da non avvicinarsi ai limiti della ints

EDIT: Come notato nei commenti, RGB potrebbe non essere la migliore del dominio in cui utilizzare l'interpolazione lineare. Si può essere meglio fuori conversione del da / per i valori RGB in HSL o HSV , e facendo interpolazione su quelli. Questo può essere facile o difficile a seconda della piattaforma. Il link wikipedia nella frase precedente dà formule per i calcoli appropriati se non sono forniti per voi.

Altri suggerimenti

Algoritmo:

  1. Trova il valore RGB per il bianco
  2. Trova il valore RGB per l'altro colore (ad esempio si parla rosso, blu, rosa, arancio)
  3. valori RGB Calcolare i cui componenti RGB sono aritmeticamente tra le componenti RGB due estremi

Ad esempio, se un estremo è (0,0,0) e l'altro estremo è (0.255.255) allora il valore a metà strada tra questi due colori è (0.128.128) ... e il valore che è un quarto della strada tra questi due valori è (0,64,64).

interpolazione colori attraverso note, punti specifici è spesso usato per la costruzione di schemi di colore per la rappresentazione grafica dei dati. Un'alternativa a una formula esplicita di interpolazione è quello di scegliere una combinazione di colori che ha qualche disegno dietro la sua rappresentazione. Una buona fonte di tale sistema è ColorBrewer .

Anche se avete bisogno di interpolare, partendo da una combinazione di colori ben progettato potrebbe produrre risultati molto più usabile.

Inizia con i due colori desiderati gradienti mezzo, e dividerli in R, G e B parti.

Decidere quanti "passi" si vuole svanire attraverso.

Dividere la differenza tra le parti R, G e B con il numero di passi. Si dispone ora di una "differenza passo" per ogni colore.

Loop attraverso ogni passo e aggiungere la differenza passo per il valore del colore una volta per ogni iterazione. Rotonda a numeri interi ultima cosa che fai.

Quali colori vuoi cambiare? bianco al rosso sarebbe solo un caso di partire con 255 255 255 e decrementare il secondo di due fino ad avere 255 0 0. blu sarebbe mantenere l'ultimo valore e decrementare per finire con 0 0 255, etc

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