Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File7.13.2 COLOR_RGB TOS typedef struct { uint16 reserved; /* auf 0 oder den Index des Eintrags setzen */ uint16 red; /* Rot: 0<->65535 */ uint16 green; /* Grün: 0<->65535 */ uint16 blue; /* Blau: 0<->65535 */ } COLOR_RGB; Falls in einem Programm die Farbdaten bereits in einem vernünftigen Format (z.B. 8 Bit pro Kanal) vorliegen, kann man sich eine Umwandlung mit Multiplikation und Division ersparen. Die Shift- und OR-Funktion des Prozessors erledigt das dann schneller und eleganter. Beispiel: Der Farbwert sei durch die Byte-Variablen r, g, b beschrieben. Die korrekte Umsetzung auf das 16-Bit-Format der COLOR_RGB-Struktur erfolgt dann so: COLOR_RGB color; color.reserved = 0; color.red = r; color.red |= (color.red << 8); color.green = g; color.green |= (color.green << 8); color.blue = b; color.blue |= (color.blue << 8); Das Strukturelement reserved sollte auf 0 gesetzt werden oder (beim Aufbau einer Farbtabelle) den Index des Eintrags enthalten. In jedem Fall müssen aber die oberen 8 Bits von reserved auf 0 gesetzt werden, da sie von den Farbroutinen ggf. für Flags verwendet werden.