PALETTE

FreeBASIC-Referenz » Alphabetische Befehlsreferenz » P » PALETTE

Syntax A: PALETTE [Index, Farbe]
Syntax B: PALETTE Index, Rotwert, Grünwert, Blauwert
Syntax C: PALETTE USING ArrayName[(idx)]
Typ: Anweisung
Kategorie: Grafik

PALETTE bearbeitet die aktuelle Farbpalette.

PALETTE ändert die aktuellen Einträge in der Farbpalette (nur in Grafik-Modi). Die Anweisung wird nur bei Modi bis 8 bpp eingesetzt; bei höheren Farbtiefen hat PALETTE keine Auswirkung.

'Index' und 'Farbe' sind abhängig von der aktuellen Farbtiefe des Grafikfensters. Wird das Grafikfenster mit SCREEN initialisiert, dann gelten folgende Farbbereiche:

BildschirmmodusIndexbereichFarbbereich
10-30-15
20-10-15
7, 80-150-15
90-150-63
110-1siehe unten
120-15siehe unten
13 - 210-255siehe unten

In den Bildschirmmodi 1, 2, 7, 8 und 9 können Sie jeder Farbnummer einen Index aus einer vordefinierten Palette zuweisen.
In den anderen Bildschirmmodi sowie bei der Verwendung von SCREENRES müssen Sie die Farbe als BGR-Farbwerte angeben. Diese haben das Format &hBBGGRR. BB, GG und RR sind jeweils der Blau-, Grün- und Rot-Wert der Farbe. Jede Teilfarbe kann dabei einen Wert von &h0 bis &h3F annehmen (0-63 als dezimale Werte).
Eine alternative Methode der Angabe der Farbe ist diese Methode:

clr = rot OR (grün SHL 8) OR (blau SHL 16)

Auch hier müssen rot, grün und blau im Bereich von 0 bis 63 liegen.

Der nächste SCREENRES- oder SCREEN-Befehl stellt die Standardpalette wieder her (siehe auch Standard-Paletten).

Alternativ zum Befehl PALETTE können Sie OUT verwenden, um die Palette zu bearbeiten; diese Methode ist allerdings veraltet und sollte nicht mehr verwendet werden.

Es ist auch möglich, die Teilfarben als einzelne Parameter anzugeben (Syntax B). Hier kann jeder Farbanteil im Bereich von 0 bis 255 liegen.

PALETTE USING (Syntax C) ändert alle Einträge der Palette auf einmal; die dazu nötigen Farbwerte werden dabei aus einem Array gelesen. Dazu muss ein Array übergeben werden, das groß genug ist, um Farbwerte für jeden Index des aktuellen Bildschirmmodus zu enthalten. Für 1 bpp müssen das 2 Elemente, für 2 bpp 4, für 4 bpp 16 und für 8 bpp 256 Elemente sein. Es müssen INTEGER-Werte sein, die das oben angegebene Format besitzen.
Die Farben, die in 'ArrayName' ab Index 'Index' gespeichert sind, werden dann den Farbnummern zugewiesen, wobei bei den Palette-Einträgen mit Farbe 0 begonnen wird. Die Verwendung von PALETTE USING mit Teilfarben ist nicht möglich; jedes Element des Arrays muss einen BGR-Wert enthalten.

Jede Veränderung der Palette wird sofort auf dem Bildschirm sichtbar.

Beispiel:

SCREENRES 640, 480, 4     ' 16 indizierte Farben
DIM AS INTEGER rot, gruen, blau, farbe

' Vertikale Streifen in allen 16 Farben zeichnen
FOR i AS INTEGER = 0 TO 15
  LINE (i * 40, 0)-((i + 1) * 40, 479), i, BF
NEXT

' Auf Tastendruck warten
GETKEY

' Farbverlauf von schwarz nach blau
FOR i AS INTEGER = 0 TO 15
  rot   = 0
  gruen = 0
  blau  = i * 4
  farbe = rot OR (gruen SHL 8) OR (blau SHL 16)
  PALETTE i, farbe
NEXT

GETKEY

' Farbverlauf von schwarz nach grün
FOR i AS INTEGER = 0 TO 15
  PALETTE i, 0, (i+1)*16 - 1, 0
NEXT

GETKEY

' Farbverlauf von schwarz nach rot
DIM Farben(15) AS INTEGER
FOR i AS INTEGER = 0 TO 15
  Farben(i) = i * 4
NEXT
PALETTE USING Farben
GETKEY

' Standardpalette wiederherstellen
PALETTE
SLEEP

Unterschiede zu früheren Versionen von FreeBASIC:
Seit Version 0.13 ist es auch möglich, die Teilfarben als einzelne Parameter anzugeben (Syntax B).

Siehe auch:
PALETTE GET, SCREENRES, COLOR (Anweisung), Standardpaletten, Grafik