Frage

Ich möchte eine Reihe von Farben aus dem Wert eines RGB-Wert finden

Wenn ich rgb (0.100.200) zum Beispiel gegeben wurde, würde es gibt mir alles zwischen rgb (0,0,255) und rgb (0.255.255). rgb jedoch nicht (255,0,255).

In ähnlicher rgb (150,50,0). Rückkehr: rgb (255,0,0) und rgb (255,255,0). Nicht rgb (255,0,255).

Sinnvoll?

Im mit PHP

War es hilfreich?

Lösung

Der Algorithmus Sie erklären, ist im Grunde: „Eine Farbe besteht aus zwei RGB-Komponenten die stärkste RGB Komponente Sei S und die andere Komponente O. 255 Variationen erstellen, in dem Sie S (255) sein lassen und O im Bereich von 0 bis 255. ".

z. alle folgenden Beispiel das gleiche Ergebnis ergeben:

a) rgb(0,100,200) 
b) rgb(0,199,200)
c) rgb(0,254,255)
d) rgb(0,1,2)

Result: rgb(0,[0-255],255)

Dies bedeutet, dass Sie nur eine 6-Varianten haben.

  1. Rot ist die größte Komponente, Grün nächstgrößte => rgb (255, [0-255], 0)
  2. Rot ist die größte Komponente, Blau nächstgrößte => rgb (255,0 [0-255])
  3. Grün ist die größte Komponente, Rot nächstgrößte => rgb ([0-255], 255,0)
  4. Grün ist die größte Komponente, Blau nächstgrößte => rgb ([0-255], 0255)
  5. Blau ist die größte Komponente, Rot nächstgrößte => rgb ([0-255], 0255)
  6. Blau ist die größte Komponente, Grün nächstgrößte => rgb (0, [0-255], 255)

Die Absicht des Algorithmus ist nicht klar, so dass ich bin zu raten, Ihr Anwendungsfall aus tatsächlich anders ist, was Sie erklären. Es behandelt nicht Farben mit entweder 1 oder 3 Komponenten (die meisten Farben tatsächlich).

Wenn Ihr Ziel ist ähnliche Farben (zum Beispiel einer Farbe in einem bestimmten Abstand) gibt es bessere Ansätze zu finden. Zum Beispiel könnten Sie Ihre Farben zu einem HSV-Farbraum (Farbton, Sättigung, Wert), und dann sagen konvertieren, dass die Farbe ähnlich ist, wenn die eine der Komponenten H, S oder V sind +/- 10 Schritte von dem Original.

Z. B .:

rgb (255,100,0) => hsv (24.100.100)

Ihr Bereich ist dann hsv ([14-34], [90-110], [90-110])

Andere Tipps

Hm, nicht sicher, ich verstehe das richtig, aber ich denke, Sie sagen, dass eine der Zahlen höher ist als die beiden anderen, und einer der Werte ist immer Null. Wenn dies der Fall ist, sollten Sie eine einfache if-else-Anweisung ähnlich

verwenden können
if (r > g && r > b) {
  if (g > 0) {
    color1 = rgb(255, 0, 0);
    color2 = rgb(255, 255, 0);
  }
  else {
    color1 = rgb(255, 0, 0);
    color2 = rgb(255, 0, 255);
  }
}
else if (r < g && g > b) {
   .
   .
   .
}

Hope, die Ihnen mit Ihrem Problem helfen.

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