Konvertieren von HEX-Farbe in RGB-Struktur in C

8

Konvertieren von Farbe HEX-Code zu RGB in reinem c nur mit C-Bibliothek (ohne C ++, Vorlagen, etc.) RGB-Struktur kann so sein - & gt; typedef struct RGB {double r; Doppel-g; doppeltes b; } RGB1; Funktion sollte RGB1

zurückgeben     
Shavkat 16.09.2010, 04:59
quelle

4 Antworten

14

Wenn Sie davon ausgehen, dass Ihr Hexadezimalwert ein Int-Typ von 32 Bit ist und wir die oben beschriebene RGB-Struktur verwenden, dann tun Sie vielleicht so etwas wie:

%Vor%     
cubic1271 16.09.2010 05:38
quelle
8

Ein RGB-Wert kann als Ganzzahl über 0xRRGGBB gespeichert werden. Beispiele:

  • Rot: 0xff0000
  • Grün: 0x00ff00
  • Blau: 0x0000ff

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.

    
Matthew 16.09.2010 05:22
quelle
6

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.

    
Tor Klingberg 08.11.2016 17:37
quelle
1

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.

    
Andrey Pirozhenko 19.12.2014 20:32
quelle

Tags und Links