Ein RGB-Wert kann als Ganzzahl über 0xRRGGBB gespeichert werden. Beispiele:
00 ist hex für dezimale 0, während ff 255 ist. 0 entspricht 0,0 und 255 bis 1,0. (Eigentlich haben Sie nicht angegeben, was der Bereich ist. Ich nehme 0.0 bis 1.0 an.)
Mit den obigen Annahmen müssen Sie also jede Komponente extrahieren und durch 255 dividieren. Da es sich sehr nach einer Hausaufgabenfrage anhört, zeige ich Ihnen nur, wie Sie die rote Komponente machen können.
%Vor% Jede hexadezimale Zahl nimmt 4 Bits auf. Also verschiebe sie um 16 Bits nach rechts (um alle 4 Ziffern nach rechts zu verschieben), um 0xRRGGBB
zu 0xRR
zu machen. Jetzt haben Sie die rote Komponente. (Nur für den Fall, dass Daten in der Ganzzahl höher sind, können Sie sie loswerden, indem Sie die Daten über & 0xff
maskieren.)
Wenn Sie mit einer Zeichenkette "#FFFFFF"
arbeiten, müssen Sie sie zuerst in eine Ganzzahl umwandeln, damit das obige funktioniert.
Wenn der Hex-Code eine Zeichenfolge ist, können Sie es wie folgt parsen.
%Vor% Das ist ints, nicht verdoppelt. Überprüfen Sie auch, ob sscanf
3 gibt, die Anzahl der gelesenen Elemente.
Ich nehme an, RGB könnte auf einigen Systemen als 0xRRGGBB gespeichert werden, aber in Windows wird es tatsächlich als 0xBBGGRR gespeichert (siehe Ссылка ). Wie der Artikel erwähnt, gibt es bereits die Makros GetRValue, GetGValue und GetBValue.