Samstag, 6 Feb, 2010

Lektion 3

In dieser Lektion soll es darum gehen in einem Bild eine Farbe auf Transparent zu stellen. Für diese Lektion tauschen wir als erstes unser Bild aus. Warum wir eine Farbe transparent setzen wollen seht ihr hier:

bild1-lektion3.jpg

Da wir aber keinen Hintergrund haben moechten und unser Bild wie folgt aussehen soll, mussen wir eine Hintergrundfarbe setzen die Transparent dargestellt wird.

bild2-lektion3.jpg

Dazu bearbeiten wir unsere Bildladefunktion. In ersten Teil lassen wir so wie es ist.

SDL_Surface *lade_bild( std::string bildpfad )
{
    //Nicht optimiertes Bild
    SDL_Surface* normal_img = NULL;
	
    //Optimiertes Bild
    SDL_Surface* opt_img = NULL;
	
    //Unoptimiertes Bild laden
    normal_img = IMG_Load( bildpfad.c_str() );
	
    //Optimiertes Bild erstellen
    opt_img = SDL_DisplayFormat( normal_img );
	
    //Unoptimiertes Bild freigeben
    SDL_FreeSurface( normal_img );

An dieser Stelle erzeugen wir einen Farbschluessel passend zur Farbtiefe des Fensters. Dazu geben wir der SDL_MapRGB() als zweiten bis vierten Parameter einen Farbwert mit. Im ersten Argument geben wir unser Bild mit um den Farbwert und das Format fest zu legen.

    //Farbschlüssel für die transparente Farbe im richigen Format erzeugen
    Uint32 colorkey = SDL_MapRGB( opt_img->format, 0xFF, 0, 0xFF ); 

Jetzt setzen wir alle Pixel in unserem Bild mit dem erzeugten Farbschlüssel auf Transparent.

    //Setze die Pixel der Farbe Rot 0xFF, Grün 0, Blau 0xFF auf Transparent
    SDL_SetColorKey( opt_img, SDL_SRCCOLORKEY, colorkey );
	
    return opt_img;
} 

Das wars schon, nun sollte der Hintergrund Transparent sein.