Wie konvertiert man einen RGB-Farbwert in einen hexadezimalen Wert in C ++?

7

In meiner C ++ - Anwendung habe ich die Farbe eines PNG-Bildes in den Werten Rot, Grün, Blau. Ich habe diese Werte in drei ganzen Zahlen gespeichert.

Wie konvertiert man RGB-Werte in den entsprechenden hexadezimalen Wert?

Beispiel dafür in diesem Format 0x1906

EDIT: Ich werde das Format als GLuint speichern.

    
Tahlil 17.01.2013, 08:47
quelle

2 Antworten

18

Speichern Sie die entsprechenden Bits jeder Farbe in einer vorzeichenlosen Ganzzahl von mindestens 24 Bits (wie in long ):

%Vor%

Jetzt statt:

%Vor%

können Sie tun:

%Vor%

Beachten Sie, dass das obige nicht den Alphakanal betrifft. Wenn Sie auch Alpha (RGBA) codieren müssen, benötigen Sie stattdessen:

%Vor%

Ersetzen Sie unsigned long durch GLuint , wenn Sie das brauchen.

    
Nikos C. 17.01.2013, 08:56
quelle
7

Wenn Sie eine Zeichenfolge erstellen möchten, können Sie wahrscheinlich snprintf() :

verwenden %Vor%

Dadurch wird die Zeichenkette 001906" in hexcol 'erstellt. So habe ich die Beispielfarbe ausgewählt (die nur aus vier Ziffern besteht, wenn sie sechs sein sollte).

Sie scheinen über die Tatsache verwirrt zu sein, dass das Präprozessorsymbol% ​​co_de% in den Headerdateien von OpenGL als GL_ALPHA definiert ist. Dies ist keine Farbe, es ist ein Formatspezifizierer , der bei OpenGL-API-Aufrufen verwendet wird, die mit Pixeln umgehen, damit sie wissen, welches Format zu erwarten ist.

Wenn Sie ein PNG-Bild im Speicher haben, würde das 0x1906 -Format nur den Alpha-Werten im Bild entsprechen (falls vorhanden), das obige ist etwas völlig anderes, da es eine Zeichenkette aufbaut . OpenGL benötigt keine Zeichenkette, es benötigt einen In-Memory-Puffer, der die Daten im erforderlichen Format enthält.

Eine Anleitung dazu finden Sie auf der Handbuchseite GL_ALPHA .

    
unwind 17.01.2013 08:55
quelle

Tags und Links