2016-05-24 9 views
2

Was wäre eine effiziente Möglichkeit, ein 1D-Array von UnityColors (sie sind ein RG? Ich habe eine Reihe von 921.600 Color s (a 1280 von 720 Pixel Bild) Gibt es eine Art von Radix-Sortierung dafür oder weißt du von irgendeiner anderen effizienten Art, so viele Farben zu sortieren? Mit der Sortierung meine ich, dass ich einige Farben habe (123, 17, 2), (5, 16, 16)), (5, 2, 150) usw. Um diese zu sortieren, sortiere ich nach R, dann nach G und nach B (es gibt wahrscheinlich einen Namen dafür, aber ich weiß es nicht), so dass die sortierte Liste (5, 2, 150, (5, 16, 16), (123, 17, 2).Wie effizient sortieren eine Menge von RGB-Farben in Einheit

+0

Was machst du, um eine dreidimensionale Menge zu sortieren? – Ben

+1

Verwenden Sie 'Array.Sort' und geben Sie einen' IComparer' ein, der weiß, wie man bestimmt, ob eine 'Farbe' kleiner, größer oder gleich einer anderen' Farbe' ist. – juharr

+0

Wenn Ihr Array sehr groß wird, könnten Sie zum Beispiel einen bitonischen Sortieralgorithmus in einem Compute Shader implementieren und Ihr Array auf der GPU sortieren. – TheDjentleman

Antwort

1

Ich sehe keinen anderen Weg als Brute Force. Der beste Weg wäre Array.Sort<T> wie im Kommentarabschnitt beschrieben.

Erstellen Sie diese Sortiermethode:

private int SortColors(Color a, Color b) 
    { 
     if (a.r < b.r) 
      return 1; 
     else if (a.r > b.r) 
      return -1; 
     else 
     { 
      if (a.g < b.g) 
       return 1; 
      else if (a.g > b.g) 
       return -1; 
      else 
      { 
       if (a.b < b.b) 
        return 1; 
       else if (a.b > b.b) 
        return -1; 
      } 
     } 

     return 0; 
    } 

Und dann ist es wie folgt verwenden:

Color[] colors = new Color[] { new Color (5, 2, 150), new Color (5, 16, 16), new Color (123, 17, 2) }; 
Array.Sort<Color> (colors, SortColors); 
0

Wenn Sie nur die „hellsten“ Farbe zu finden versuchen. Sie müssen sie nicht sortieren. Du könntest sie einfach durchlaufen und die hellsten finden.

Dies ist sehr, sehr viel Pseudo-Code, aber Sie bekommen die Idee.

Color brightest = new Color(0, 0, 0); 

for (int i = 0; i < count; i++) 
{ 
    Color current = list[i]; 
    if (current > brightest) // whatever your comparing means 
    { 
    brightest = current; 
    } 
} 
+0

Es tut mir leid wenn es war unklar. Ich versuche nicht, die "hellste" Farbe im Rahmen zu finden. Ich versuche, die hellste Farbe für dieses Bild zu finden. Zum Beispiel –

+0

Entschuldigung, ich drücke Enter. Zum Beispiel, wenn das Bild ein Bild von einem Backsteingebäude wäre, würde ich wahrscheinlich nach einem Rosa oder einem Gelb suchen. Obwohl auf dem Bild kein Rosa oder Gelb ist, ist es die "herausragendste" Farbe (von allen möglichen RGB-Farben), die in diesem Bild enthalten sein könnte. –

Verwandte Themen