Konvertieren von HEX-Farbe in RGB-struct in C
Konvertieren von Farb-HEX-code in RGB in reinem c mit Hilfe der C-Bibliothek (ohne C++,templates, etc.) RGB-Struktur kann wie folgt Aussehen -> typedef struct RGB{ double r; double g; double b; } RGB1;
Funktion zurückkehren sollte, RGB1
- Ich bin mir nicht sicher, ob ich die Frage verstehe. Ich glaube, dass eine schwächelnde Dinge wie code und / oder das einfügen von newlines in der Frage an strategischen Orten kann nützlich sein, wodurch die Frage für die Menschen leichter zu Lesen (und damit Antwort).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt, dass der hex-Wert ist ein 32-bit - " int " - Typ, und dass wir verwenden das RGB-Struktur, die oben beschrieben ist, dann vielleicht etwas wie:
Einen RGB-Wert gespeichert werden kann als bei integer-über 0xRRGGBB. Beispiele:
00 hex dezimal 0, während die ff ist 255. 0 entspricht 0.0 und 255 1.0. (Eigentlich ist Sie nicht angegeben, welche der Reihe ist. Ich gehe davon aus, 0.0 bis 1.0.)
Also mit den oben genannten Annahmen, müssen Sie zum extrahieren der einzelnen Komponenten und der Division durch 255. Da klingt es fast wie eine Hausaufgaben-Frage, ich werde nur zeigen Ihnen, wie Sie tun können, die rot-Komponente.
Jede hex-Ziffer nimmt 4 bits. Also shift nach rechts von 16 bits (bewegen alles 4 Ziffern auf der rechten Seite) zu machen
0xRRGGBB
geworden0xRR
. Jetzt haben Sie die rote Komponente. (Nur, falls es einige Daten, die sich höher in die ganze Zahl ist, können Sie es loswerden durch Maskierung der Daten über& 0xff
.)Wenn Sie es mit einem string
"#FFFFFF"
, dann würden Sie zuerst konvertieren Sie Sie in eine Ganzzahl für die oben genannten arbeiten.Wenn der hex-code ist eine Zeichenfolge, die Sie analysieren können, wie diese
Ist für ints, nicht verdoppelt. Auch nicht überprüfen, dass
sscanf
3 gibt die Anzahl der Elemente Lesen.Ich denke, RGB gespeichert werden kann als 0xRRGGBB auf einigen Systemen, aber in Windows ist es eigentlich so gespeichert, wie Sie 0xBBGGRR (siehe http://msdn.microsoft.com/en-us/library/windows/desktop/dd183449). Wie der Artikel erwähnt, gibt es Makros GetRValue, GetGValue und GetBValue bereits verfügbar.