PALETTE

FreeBASIC-Referenz » Alphabetische Befehlsreferenz » P » PALETTE

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

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 keinen Effekt.
Ein Aufruf von PALETTE ohne Parameter stellt die Standard-Palette wieder her.

'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 zwischen &h0 und &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 zwischen 0 und 63 liegen.

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

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

Seit Version 0.13b ist es auch möglich, die Teilfarben als einzelne Parameter anzugeben. Hier kann jeder Farbanteil zwischen 0 und 255 liegen.

PALETTE USING (Syntax 3) ä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.13b ist es auch möglich, die Teilfarben als einzelne Parameter anzugeben (Syntax B).

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