Algorithmus: Erzeuge Farbe aus einer Zeichenkette

8

Ich möchte eine Farbe aus einer bestimmten Zeichenfolge erstellen. Die Zeichenfolge muss nicht mit der resultierenden Farbe in irgendeiner Form verknüpft sein, aber die gleiche Zeichenfolge sollte immer die gleiche Farbe ergeben.

Diese Frage ist nicht an eine bestimmte Programmiersprache gebunden, deshalb sollte die "Farbe" in einem sprachenunabhängigen Format wie RGB sein.

Es wäre gut, wenn der Algorithmus Farben in einem breiten Farbspektrum und nicht nur in gräulichen Farben erzeugt.

Perfekt wäre so etwas (C ++):

%Vor%     
MOnsDaR 01.05.2011, 13:53
quelle

6 Antworten

10

Nehmen Sie einen Hash der Zeichenfolge und verwenden Sie die ersten drei Bytes des Hashs als rote, blaue und grüne Werte.

    
SLaks 01.05.2011, 13:57
quelle
1

Sie können einen beliebigen Hashing-Algorithmus verwenden, um einen Wert aus der Zeichenfolge zu erstellen, der für eine gegebene Zeichenfolge immer derselbe ist, und die Farbkomponenten daraus abrufen.

Die Methode GetHashCode in .NET gibt zum Beispiel eine Ganzzahl zurück, so dass es einfach wäre, daraus einen RGB-Wert zu erstellen:

%Vor%

oder

%Vor%     
Guffa 01.05.2011 14:01
quelle
1

Ich werde versuchen, mit einem MD5 auf der Zeichenfolge:

%Vor%

Was der Algorithmus macht, ist im Grunde folgendes: Er erhält die ersten drei Blöcke von 4 Bytes (dh 8 Zeichen) und gibt sie in einem Tupel modulo 256 zurück, so dass ihr Bereich in [0, 255]

    
Gabi Purcaru 01.05.2011 14:04
quelle
1
%Vor%

Beispiel für den Hash

    
Drake 01.05.2011 14:06
quelle
1

Sie können die Godel-Nummer der Zeichenfolge berechnen. Grundsätzlich wäre es so (int) A [0] * 256 ^ n + (int) a [1] * 256 ^ (n-1) .... + (int) A [0]

Genau wie unser Nummernsystem, aber mit der Basis 256, weil es 256 mögliche Zeichenwerte gibt.

Als nächstes reduzieren Sie einfach um einen Faktor für den Bereich des Spektrums, dem Sie zuordnen möchten:

z.B. Angenommen, Sie wollen in den Bereich 0 ... 2000

Dann nimm einfach die Nummer, die du bekommst und dividiere durch (größte Zahl in deiner Reichweite) / 2000

Der Vorteil dieses Ansatzes besteht darin, dass Sie dadurch mehr Farben erhalten als nur RGB. Wenn Sie jedoch die Einfachheit der 3 Primärfarben haben möchten, können Sie stattdessen nur durch 3 teilen und verschiedene Bereiche nehmen, oder nehmen Sie mod 3.

    
Larry Watanabe 01.05.2011 14:00
quelle
0

Es gibt eine Reihe von Möglichkeiten, dies basierend auf dem zu tun, was Sie erreichen möchten. Am einfachsten ist es, die Zeichenkette mit str_stream in einen Stream umzuwandeln und die Textwerte als unsignierte Zeichen zu lesen.

    
Tavison 01.05.2011 13:59
quelle

Tags und Links