Forum: Mikrocontroller und Digitale Elektronik 16 Bit Farbwerte Tabelle


von Klaus (Gast)


Lesenswert?

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 !

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Hagen R. (hagen)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.