Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Linux-UNIX-Programmierung von Jürgen Wolf
Das umfassende Handbuch – 2., aktualisierte und erweiterte Auflage 2006
Buch: Linux-UNIX-Programmierung

Linux-UNIX-Programmierung
1216 S., mit CD, 49,90 Euro
Rheinwerk Computing
ISBN 3-89842-749-8
gp Kapitel 16 SDL
  gp 16.1 Was ist und kann SDL?
  gp 16.2 SDL installieren
  gp 16.3 SDL-Anwendungen erstellen
  gp 16.4 SDL initialisieren und Videomodus einstellen
    gp 16.4.1 Programmbeispiel – SDL initialisieren und Videomodus einstellen
  gp 16.5 Direkt auf den Bildschirm zeichnen
    gp 16.5.1 Programmbeispiel – direkt auf den Bildschirm zeichnen
  gp 16.6 Bitmap laden und anzeigen
    gp 16.6.1 Programmbeispiel – Bitmap laden und anzeigen
  gp 16.7 Ein anderes Grafikformat laden und anzeigen
  gp 16.8 Der rechteckige Bildbereich von SDL
  gp 16.9 Farbenschlüssel, Transparenz und Alpha-Blending
    gp 16.9.1 Alpha-Blending
  gp 16.10 Animation
    gp 16.10.1 Programmbeispiel – Animation
  gp 16.11 Eingabe- und Ereignisverarbeitung
    gp 16.11.1 SDL-Event-Struktur
    gp 16.11.2 Maus-Events
    gp 16.11.3 Programmbeispiel – Maus-Event
    gp 16.11.4 Tastatur-Events
    gp 16.11.5 Programmbeispiel – Tastatur-Events
    gp 16.11.6 Joystick-Events
    gp 16.11.7 Programmbeispiel – Joystick-Events
    gp 16.11.8 Weitere Events
  gp 16.12 Audio
    gp 16.12.1 Programmbeispiel – Audio
  gp 16.13 Ausblick


Rheinwerk Computing

16.9 Farbenschlüssel, Transparenz und Alpha-Blending  downtop

Wenn Sie eine Bitmap-Grafik (ein Ball z. B.) mit einem festen Hintergrund haben (z. B. schwarz) und platzieren diese Grafik jetzt in einem Surface, dessen Hintergrund blau ist, sieht dies ein wenig seltsam aus. SDL bietet Ihnen hierzu eine Möglichkeit, dass die eigentliche Grafik ohne den Hintergrund dargestellt wird. Dies wird mit einem Farbenschlüssel-Blit erledigt. Des Weiteren bietet SDL noch eine Erweiterung dieser Technik mit RLE (Run-Length Encoding) an – was eine erhebliche Beschleunigung des Zeichnens bewirkt. RLE ist allerdings leider (noch) nur für Bitmaps gedacht.

Ein Farbschlüssel ist ein einzelner Pixel-Wert, den Sie als transparent deklarieren können. Wenn Sie also einen Ball mit schwarzem Hintergrund haben und diesen nun auf einem weißen Hintergrund darstellen wollen, müssen Sie den Farbschlüssel für Schwarz ermitteln. Einen solchen 32-Bit-Farbwert können Sie einfach mit der Funktion SDL_MapRGB() festlegen (die Funktion haben Sie schon einmal verwendet, als es darum ging, einen Pixel auszugeben). Im Falle einer schwarzen Farbe sieht dies dann so aus:

Uint32 colorkey;
...
colorkey = SDL_MapRGB(bild->format, 0, 0, 0);

Nachdem Sie den 32-Bit-Farbwert ermittelt haben, können Sie jetzt mit der Funktion SDL_SetColorKey() den Farbschlüssel festlegen.

int SDL_SetColorKey( SDL_Surface *surface,
                     Uint32 flag, Uint32 key );

Damit setzen Sie den Farbschlüssel key für das SDL-Surface surface. Für die Angabe des Flags können Sie SDL_SRCCOLORKEY verwenden, womit das Farbschlüssel-Blitting für das Surface eingeschaltet wird. Die RLE-Beschleunigung können Sie zusätzlich mit dem Flag SDL_RLEACCEL und das Flag SDL_SRCCOLORKEY mit dem bitweisen ODER verknüpfen. Nach diesem Vorgang wird z. B. beim nächsten Funktionsaufruf von SDL_BlitSurface() jeder Pixel, der als Farbschlüssel deklariert wurde, nicht in das Ziel-Surface kopiert. Somit würde in diesem Fall der Ball ohne den schwarzen Hintergrund als transparenter Ball gezeichnet.


Rheinwerk Computing

16.9.1 Alpha-Blendintoptop

Ein weiterer cooler Effekt ist das Alpha-Blending, das gerne bei der Spieleprogrammierung eingesetzt wird – womit der Transparenz noch eines darauf gesetzt werden kann. Damit kann ein Effekt erreicht werden, mit dem eine Grafik durchsichtig bis zum kompletten Verschwinden manipuliert werden kann. Die meisten Bilder verwenden den RGB-Kanal für einen Pixel. Sie haben sicherlich auch schon etwas von RGBA gehört. Wenn davon die Rede ist, wird vom vierten Kanal, dem Alpha-Kanal gesprochen. Geben Sie als Wert für den vierten Kanal 0 an, ist der Pixel vollkommen transparent – also nicht mehr sichtbar. Je höher der Wert ist, umso deutlicher und sichtbarer wird der Pixel. Ein Wert von 255 entspricht einem Pixel ohne Alpha-Kanal – also dem üblichen Bild.

Allerdings ist das Alpha-Blending eine sehr rechenintensive Aufgabe für den Prozessor, so dass hierbei wie schon bei der Transparenz eine Unterstützung der Videobeschleunigung sinnvoll ist – und von SDL auch wieder zur Verfügung gestellt wird. Auch wenn eine Grafik keinen Alpha-Kanal besitzt, können Sie den Alpha-Blending-Effekt verwenden. Diese Technik wird dann als Pre-Surface Alpha-Blending bezeichnet. Das Alpha-Blending können Sie mit der Funktion SDL_SetAlpha() verwenden.

int SDL_SetAlpha(SDL_Surface *surface, Uint32 flag, Uint8 alpha);

Hiermit setzen Sie den Pre-Surface Alpha-Kanal für surface. Mit dem Wert alpha können Sie den Alpha-Kanal einstellen. Die Werte reichen von völlig durchsichtig (0) bis zum Ausschalten des Alpha-Blendings (255). Als Flags können Sie verwenden, ob der Alpha-Kanal verwendet werden soll (SDL_SRCALPHA) und ob RLE-Beschleunigung für das Blitting verwendet wird (SDL_RLEACCEL). Beide Flags können wieder mit dem bitweisen ODER verknüpft werden. Wird das Flag SDL_SRCALPHA nicht verwendet, werden die Alpha-Informationen ignoriert, wenn das Surface beim nächsten Mal ge(blitt)ed wird. Die Funktion gibt bei Erfolg 0, ansonsten bei einem Fehler –1 zurück.

 << zurück
  
  Zum Rheinwerk-Shop
Neuauflage: Linux-UNIX-Programmierung
Neuauflage:
Linux-UNIX-
Programmierung

bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: Linux-Server






 Linux-Server


Zum Rheinwerk-Shop: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Rheinwerk-Shop: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Rheinwerk-Shop: Shell-Programmierung






 Shell-
 Programmierung


Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
Info





Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern