Hallo, mal eine ganz dumme Frage. Ich programmiere ein S65 Display und habe eine Library an meine Hardware angepasst. Darin sind ca. 6 Farben (16Bit) definiert. z.B. schwarz: 0x0000 weiß: 0xFFFF rot: 0xF800 Wie kann ich mir zum Beispiel die Farbe orange erzeugen ? Ich will nicht jede Kombination ausprobieren und schauen, was das Display zeigt. Kennt jemand eine Tabelle, wo die einzelnen Farben zu den jeweiligen 16Bit zugeordnet sind ? Danke für die Hilfe !
Nimm eine der zahlreich verfügbaren 24-Bit-Farbtabellen* fürs Webdesign, suche Dir den passenden Farbwert aus, streiche die entsprechenden LSBs und kombiniere die resultierenden Werte zu Deinem 16-Bit-Wert. Beispiel: 0xFF6633 76543210 -> 76543210 R = 0xFF = 0b11111111 0b11111--- G = 0x66 = 0b01100110 0b01100--- B = 0x33 = 0b00110011 0b00110--- R 11111 G 01100 B 00110 -111 1101 1000 0110 7 D 8 6 0x7D86 Dies Beispiel ist für 15-Bit-Farben (5 Bit je Grundfarbe), bei einer ungleichmäßigen Verteilung musst Du das Schema entsprechend anpassen. Meistens hat G dann sechs statt fünf Bits. *) http://www.colorschemer.com/online.html
aus meine S65 Lib
1 | #define RGB(r, g, b) (((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3))
|
2 | #define NONE RGB(0x00, 0x04, 0x00)
|
3 | #define BLACK RGB(0x00, 0x00, 0x00)
|
4 | #define DKGRAY RGB(0x40, 0x40, 0x40)
|
5 | #define GRAY RGB(0x80, 0x80, 0x80)
|
6 | #define LTGRAY RGB(0xA0, 0xA0, 0xA0)
|
7 | #define WHITE RGB(0xFF, 0xFF, 0xFF)
|
8 | #define DKRED RGB(0x60, 0x00, 0x00)
|
9 | #define RED RGB(0xFF, 0x00, 0x00)
|
10 | #define LTRED RGB(0xFF, 0x40, 0x40)
|
11 | #define DKGREEN RGB(0x00, 0x70, 0x00)
|
12 | #define GREEN RGB(0x00, 0x8F, 0x00)
|
13 | #define LTGREEN RGB(0x50, 0xFF, 0x50)
|
14 | #define DKBLUE RGB(0x00, 0x00, 0x60)
|
15 | #define BLUE RGB(0x10, 0x10, 0xFF)
|
16 | #define LTBLUE RGB(0x60, 0x60, 0xFF)
|
17 | #define DKYELLOW RGB(0x80, 0x80, 0x00)
|
18 | #define YELLOW RGB(0xFF, 0xFF, 0x00)
|
19 | #define LTYELLOW RGB(0xFF, 0xFF, 0x80)
|
20 | #define DKMAGENTA RGB(0x60, 0x00, 0x60)
|
21 | #define MAGENTA RGB(0xFF, 0x00, 0xFF)
|
22 | #define LTMAGENTA RGB(0xFF, 0x60, 0xFF)
|
23 | #define DKCYAN RGB(0x00, 0x60, 0x60)
|
24 | #define CYAN RGB(0x00, 0xB0, 0xB0)
|
25 | #define LTCYAN RGB(0x60, 0xFF, 0xFF)
|
26 | #define GOLD RGB(0x90, 0x90, 0x30)
|
Für den Anfang gehst du so vor wie Rufus es sagte, dann musst du aber dein Orange fintetunen auf das Display da dieses farbverfälschend ist. Das Makro RGB(r,g,b) wandelt einen 24 Bit Farbwert als 3 Bytes für Rot,Grün,Blau in den für das S65 gültigen 16 Bit Farbwert um. Dabei entfernt es die LSBs. Gruß Hagen
Hallo, das Display hat 5 Bit für R, 5 Bit für B und 6 Bits für G. Ich werde das mal ausprobieren. Danke für eure Beiträge.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.