SDL SetPalette

Aus DGL Wiki
Version vom 10. März 2009, 19:09 Uhr von DGLBot (Diskussion | Beiträge) (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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);
	.
	.
	.
	.


Siehe auch

SDL_SetColors,SDL_SetVideoMode, SDL_Surface, SDL_Color