SDL SetPalette
Inhaltsverzeichnis
SDL_SetPalette
Name
SDL_SetPalette - Setzt eine Farbpalette für eine gegebene 8-bit Surface
Delphi-Spezifikation
function SDL_SetPalette(surface: PSDL_Surface; flags: Integer; colors: PSDL_Color; firstcolor: Integer; ncolors: Integer): Integer;
Parameter
surface | 8-Bit Surface |
---|---|
flags | SDL_LOGPAL oder SDL_PHYSPAL |
colors | Zeiger auf ein Array von PSDL_Color |
firstcolor | Erster Eintrag der Palette welcher geändert werden soll. |
ncolors | Anzahl der Einträge die ab firstcolor geändert werden sollen. |
Beschreibung
Setzt einen Teil der Farbpalette für eine gegebene 8-bit Surface.
Palettierte (8-bit) Displaysurface mit SDL_HWPALETTE Flag haben zwei Paletten, eine logische Palette, welche für das Blitten aus/in die Surface benutzt wird, und eine physikalische Palette, welche bestimmt wie die Hardware die Farben auf das Display bringt. Deshalb ist es öfters vom Vorteil nur eine oder beide Paletten zu verändern um den gewünschten Farbeffekt zu erreichen.
Über SDL_LOGPAL oder SDL_PHYSPAL kann eingestellt werden welche verändert werden sollen.
Falls surface die aktuelle Displaysurface ist, so wird die Displayfarbpalette auf die angeforderten Farben geänert. Falls SDL_HWPALETTE bei SDL_SetVideoMode gesetzt wurde, so wird SDL_SetColors immer 1 zurückgeben und es wird garantiert, dass die Palette wie gewünscht gesetzt wird, auch wenn die Displaypalette verbogen werden muss oder es unter Emulation laufen muss.
The Farbkomponenten einer SDL_Color-Struktur sind 8-Bit gross, womit man 256³ = 16777216 Farben zur Verfügung hat.
Rückgabewert
Falls surface keine palettierte Surface ist, macht diese Funktion nichts und gibt 0 zurück. Falls alle Farben korrekt gesetzt wurden, wird 1 zurückgesetzt. Falls nicht alle Farbeinträge gesetzt werden konnten wird 0 zurückgegeben und man sollte sich die Surface-Palette anschauen um die aktuelle Palette festzustellen.
Beispiel
// Erstellt eine Displaysurface mit einer Graufarbenpalette. var screen: PSDL_Surface; colors: Array[0..255] of TSDL_Color; i: Integer; begin . . . // Fülle colors mit den Farbinformationen for i:=0 to 255 do begin colors[i].r := i; colors[i].g := i; colors[i].b := i; end; // Erstelle das Display screen := SDL_SetVideoMode(640, 480, 8, SDL_HWPALETTE); if not Assigned(screen) then begin writeln('Couldn''t set video mode: ', SDL_GetError()); exit; end; // Setzt die Palette SDL_SetPalette(screen, SDL_LOGPAL or SDL_PHYSPAL, @colors[0], 0, 256); . . . .