FreeBasic: Farbe

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Farbe[Bearbeiten]

Was wir Menschen als Farbe wahrnehmen, ist ein Gemisch aus vielen elektromagnetischen Strahlungen unterschiedlicher Wellenlängen, die auf unsere Netzhaut im Auge auftreffen. Allerdings ist es aus mehreren Gründen nicht möglich, den Computer mit diesen Informationen über die Wellenlängen und Intensitäten zu füttern, und auf dieser Basis die Farberzeugung zu gestalten, einerseits auf Grund der extremen Datenmengen, sowie der Abweichungen, die bei der Übertragung von Grafikkarte zu Monitor entstehen sowie der Methode, mit der auf dem Bildschirm Farbe erzeugt wird.

Um möglichst das gesamte sichtbare Farbspektrum abzudecken, gibt es mehrere sogenannte Farbmodelle, die verwendet werden, um Farbe zu erzeugen, bzw. Farbinformationen zu speichern; darunter indizierte Modi, das RGB-Modell, das CMYK-Farbmodell oder das YUV-Farbmodell. Interessant sind im Rahmen der Programmierung mit FreeBASIC nur die indizierten Modi und das RGB-Modell.

Indizierte Modi[Bearbeiten]

FreeBASIC hat seine mit screen aufrufbaren Grafikmode von QBasic / Quick-Basic geerbt. Darunter sind auch die sogenannten indizierten Modi. Innerhalb dieser Grafikmodi gibt es ein festgelegtes Spektrum an Farben, beispielweise in "screen 7" mit 16 Farben (schwarz, blau, grün, magenta, rot, lila, braun, hellgrau, dunkelgrau, hellblau, hellgrün, hellmagenta, hellrot, pink, gelb, weiß). Diese Farben werden als Zahlen einer Liste (einem "Index", daher "Indizierter Modus") angesprochen, Blau entspricht Beispielsweise 1, Gelb 14. line (20, 20)-(100,100), 14 zeichnet einen gelben Strich.

RGB Modi[Bearbeiten]

RGB steht für "Red, Green, Blue", die Grundfarben des additiven Farbsystems. Mit diesen Farben lassen sich - ähnlich einem Farbmalkasten - andere Farben mischen. Ein Teil Rot und ein Teil Blau ergibt beispielsweise Lila. Die Abstufungen werden (bei 24 Bit Farbtiefe, was die geläufigst ist) in 256igstel vorgenommen, es ist also möglich, 37/256 Teile Rot mit 88/256 Teilen Blau und 256/256 Teilen Grün zu mischen. Derartige Farbangaben werden in FreeBASIC als uinteger gemacht, im Format &hRRGGBB wobei RR dem Hexadezimalpendant des Rotwertes entspricht, analog für GG = Grün und BB = Blau.

Um das Erstellen dieses Wertes zu vereinfachen gibt es das RGB-Makro:

circle (100, 100), 100, rgb(255, 15, 30)

zeichnet (in einem rgb-Farbmodus) einen Kreis mit der Farbe, die aus 255/255 Teilen Rot, 15/255 Teilen Grün und 30/255 Teilen Blau gemischt ist.

RGBA Modi[Bearbeiten]

A steht in diesem Modus für "Alpha", bzw. die "Durchsichtigkeit" der Farbe. Das Format dieser Farbinformationen ist &hAARRGGBB, und wird im Verhältnis Alpha_der_zu_zeichnenden_Farbe / Alpha_des bestehenden_Pixels mit dem Hintergrund vermischt.


Es gibt mehrere Möglichkeiten bei FreeBASIC Farben darzustellen.
In den meisten Screenmodi wird mit Indizierten Farben gearbeitet, also Farben die bereits vorbestimmt sind und per "Index" aufgerufen werden. So zum Beispiel im Screenmodus 12. Hier gibt es genauso wie bei allen tieferen Screenmodi 256 Farben, die mit den Zahlen 0-255 erreichbar sind.

Farbtiefe[Bearbeiten]

Die Farbtiefe wird gewöhnlich in Bit angegeben. In FreeBASIC sind folgende Werte möglich:

  • 8 (256 Farben, indiziert)
  • 15 (32768 Farben, RGB)
  • 16 (65536 Farben, RGB)
  • 24 (16 Mio Farben, RGB)
  • 32 (sog. "TrueColor", RGBA)

Verwendung[Bearbeiten]

Im Gegensatz zu screen ist es möglich, mit dem neuen Befehl screenres auch eigene Werte für Farbtiefe / Fenstergrößen festzulegen.

Beispiel:

 screenres 100,100,24        'Fenstergröße 100 x 100 mit einer Farbtiefe von 24 Bit
 paint(1,1),rgb(255,255,255) 'Weiss
 sleep
 paint(1,1),rgb(255,0,0)     'Rot
 sleep
 paint(1,1),rgb(0,255,0)     'Grün
 sleep
 paint(1,1),rgb(0,0,255)     'Blau
 sleep
 paint(1,1),rgb(0,0,0)       'Schwarz (geht auch, indem man CLS verwendet)
 sleep