Trying to make background of a sprite transparent, but it wont work

Started by
2 comments, last by Endurion 11 years, 4 months ago
I'm in the middle of learning sdl, and I'm right now i'm trying out the Transparent part, but the code on the tutorial wont work.
I'm using a 32x32 bmp of a little ship with a the background color 255, 0 ,255 or thats atleast what the graphics program says

#include "SDL.h"
int main(int argc, char *argv[])
{
SDL_Surface *screen , *ship;
SDL_Rect shipRect;
shipRect.x = 0 ;
shipRect.y = 0 ;
atexit(SDL_Quit);
if( SDL_Init(SDL_INIT_VIDEO) < 0 ) exit(1);
SDL_WM_SetCaption("Fryday", NULL);
screen = SDL_SetVideoMode( 256 , 224 , 32 , SDL_DOUBLEBUF|SDL_HWSURFACE|SDL_ANYFORMAT);
SDL_FillRect(screen , NULL , 0x221122);
ship = SDL_LoadBMP("./ship.bmp");
SDL_BlitSurface( ship , NULL , screen , &shipRect );
SDL_SetColorKey( ship, SDL_SRCCOLORKEY, SDL_MapRGB(ship->format, 255, 0, 255) );
SDL_Flip(screen);
SDL_Delay( 8000 );
return 0;
}
Advertisement
I think the main problem here is that you need to set the color key on the ship surface before you blit it. Although it would probably help in future if you said what result you got from the program and what result you were expecting rather than "it doesn't work".
You must call SDL_SetColorKey BEFORE blit the desired surface.

A good practice is load the image on the beginning of the application, and set the color key after.

(Sorry if I wrote something wrong.)
To detail ptrrfs answer even more, load the image once, and set the color key on that image once. The color key is then a property of that SDL_Image.

Fruny: Ftagn! Ia! Ia! std::time_put_byname! Mglui naflftagn std::codecvt eY'ha-nthlei!,char,mbstate_t>

This topic is closed to new replies.

Advertisement