Frage

Lassen Sie uns das folgende Szenario vor:. Eine Funktion, die Code Farben von weiß bis rot erzeugen kann, von weiß bis blau, von weiß bis rosa, von weiß bis orange, etc

Der Farben-Code ist im RGB-Format mit Werten von 0 bis 255.

Irgendwelche Ideen? Können Sie mir den Pseudo-Code oder einen Link zu solchen Algorithmus geben?

War es hilfreich?

Lösung

Es klingt wie Sie nach linearer Interpolation - in Ihrem Fall aus weißen Interpolations-zu die angegebene Farbe. Zum Beispiel 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);
    }
}

Natürlich gibt es andere Möglichkeiten, es neben einer linearen Interpolation zu tun, aber das ist wahrscheinlich die einfachste sein. Beachten Sie, dass dies schwierig wird, wenn Sie eine Menge von Schritten oder größere Werte haben, da Sie die Möglichkeit der Überlauf berücksichtigen müssen. obwohl in diesem Fall sollten Sie in Ordnung sein -. Sie sind wahrscheinlich nicht mehr als 256 Schritte wollen, und der Maximalwert beträgt 255, so dass Sie nicht in der Nähe der Grenzen von ints bekommen

EDIT: Wie in den Kommentaren erwähnt, kann RGB auch nicht die beste Domäne, in der seine lineare Interpolation zu verwenden. Sie können am besten sein, die von / nach RGB-Werte in HSL oder HSV off Konvertieren und Interpolation zu tun auf jene. Dies kann leicht oder schwierig sein, je nach Plattform. Der Wikipedia-Link im vorherigen Satz gibt Formeln für die entsprechenden Berechnungen, wenn sie nicht für Sie zur Verfügung gestellt sind.

Andere Tipps

Algorithmus:

  1. Finden Sie den RGB-Wert für Weiß
  2. Finden Sie den RGB-Wert für die andere Farbe (zum Beispiel der Sie erwähnen, rot, blau, rosa, orange)
  3. Berechnen RGB-Werte, deren RGB-Komponenten sind arithmetisch zwischen den RGB-Komponenten von zwei Extremen

Zum Beispiel, wenn ein extrem ist (0,0,0) und die andere Extrem ist (0.255.255), dann wird der Wert auf halbem Weg zwischen diesen beiden Farben ist (0128128) ... und der Wert, der ein Viertel der ist Weg zwischen diesen beiden Werten (0,64,64).

Farben durch bekannte, spezifische Punkte Die Interpolation wird häufig für Grafische Darstellung von Daten für die Konstruktion von Farbschemata verwendet. Eine Alternative zu einer expliziten Interpolationsformel ist, ein Farbschema zu wählen, die etwas Design hinter seiner Repräsentation hat. Eine gute Quelle eines solchen Systems ist ColorBrewer .

Auch wenn Sie interpolieren müssen, von einem Schema gut gestalteten Farbausgang könnte viel mehr verwertbare Ergebnisse produzieren.

Beginnen Sie mit den zwei Farben, die Sie Steigungen zwischen möchten, und teilen Sie sie in R, G und B Teile.

Entscheiden Sie, wie viele „Schritte“ Sie verblassen durch wollen.

Dividieren der Differenz zwischen den R-, G- und B-Teile mit der Anzahl von Schritten. Sie haben nun einen „Schritt Unterschied“ für jede Farbe.

Schleife durch die einzelnen Schritte und fügen Sie den Farbwert einmal die Stufendifferenz für jede Iteration. Runde Zahlen die letzte , was Sie tun.

Welche Farben wollen Sie ändern? weiß auf rot wäre nur ein Fall mit 255 255 255 Starten und Erniedrigen der zweiten zwei bis 255 0 0 blau haben wäre, den letzten Wert halten und mit 0 0 255 usw. Erniedrigen am Ende

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top