sdl color key, don't understand

Reply

Join Date: Aug 2007
Posts: 7
Reputation: avgprogramerjoe is an unknown quantity at this point 
Solved Threads: 0
avgprogramerjoe avgprogramerjoe is offline Offline
Newbie Poster

sdl color key, don't understand

 
0
  #1
Aug 26th, 2007
Hey guys I can't figure out how to get the sdl colorkey to work, I've tried to find a tutorial on it, but nothing seemed to make sense.
    if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
                {
                    printf( "Unable to init SDL: %s\n", SDL_GetError() );
                    return 1;
                }

            // make sure SDL cleans up before exit

            atexit(SDL_Quit);
            SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16,
                                           SDL_HWSURFACE|SDL_DOUBLEBUF);

            if ( !screen )
                {
                    printf("Unable to set 640x480 video: %s\n", SDL_GetError());
                    return 1;
                }

            SDL_WM_SetCaption( "Battle Pong!", NULL );

            // load an image

            SDL_Surface* bmp = SDL_LoadBMP("pong.bmp");
            if(SDL_SetColorKey(bmp, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(bmp->format, 0, 0 ,0)) == -1)
            fprintf(stderr, "Warning: colorkey will not be used, reason: %s\n", SDL_GetError());
            }
Gives me an error at the maprrgb function, it just says error at this point.

What am I doing wrong?

Thanks,


Joe
Reply With Quote Quick reply to this message  
Join Date: Aug 2007
Posts: 7
Reputation: avgprogramerjoe is an unknown quantity at this point 
Solved Threads: 0
avgprogramerjoe avgprogramerjoe is offline Offline
Newbie Poster

Re: sdl color key, don't understand

 
0
  #2
Aug 27th, 2007
Since no one here is answering the post, could a moderator please move it to the game dev forum?
Reply With Quote Quick reply to this message  
Join Date: Aug 2005
Posts: 15,358
Reputation: Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute 
Solved Threads: 1463
Team Colleague
Featured Poster
Ancient Dragon's Avatar
Ancient Dragon Ancient Dragon is offline Offline
Still Learning

Re: sdl color key, don't understand

 
0
  #3
Aug 27th, 2007
moved, but I don't know if it will help.
Don't PM me with questions -- you might get a nasty PM in response. If you have a question then post it in one of the forums.
Reply With Quote Quick reply to this message  
Join Date: Jul 2006
Posts: 1,091
Reputation: MattEvans is a jewel in the rough MattEvans is a jewel in the rough MattEvans is a jewel in the rough 
Solved Threads: 63
Moderator
Featured Poster
MattEvans's Avatar
MattEvans MattEvans is offline Offline
Veteran Poster

Re: sdl color key, don't understand

 
0
  #4
Aug 27th, 2007
Are you getting a compiler error or a runtime error? I get a compiler error if I try to build that:
  1. if(SDL_SetColorKey(bmp, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(bmp->format, 0, 0 ,0)) == -1)
  2. //<----THERE SHOULD BE AN OPENING BRACE
  3. fprintf(stderr, "Warning: colorkey will not be used, reason: %s\n", SDL_GetError());
  4. } //<---- OR NO CLOSING BRACE

But, that might just be because you've pasted the body of a function/block and missed the opening brace from the start of the function/block....

I don't get any runtime error once I successfully compile; if you're getting a runtime error, try taking out the SDL_MapRGB(bmp->format, 0, 0 ,0) and replacing it with 0. Based on literature here: http://docs.mandragor.org/files/Comm...xelformat.html, I reckon it's a safe bet that RGB 0, 0, 0 will usually be 'color key' 0, UNLESS you're using a palleted bitmap.. Try it, see if it works and if you get the right effect... Also, check if the bitmap was successfully loaded before trying to access bitmap->format. I got a segfault the first time I ran that, because I didn't have a pong.bmp file.. Do a check like:
  1. SDL_Surface* bmp = SDL_LoadBMP("pong.bmp");
  2. if( bmp == NULL )
  3. {
  4. cerr << "Bitmap didn't load: " << SDL_GetError();
  5. return 387;
  6. }
Last edited by MattEvans; Aug 27th, 2007 at 2:19 pm. Reason: pressed 'enter' too early..
Plato forgot the nullahedron..
Reply With Quote Quick reply to this message  
Join Date: Jan 2007
Posts: 1,066
Reputation: Sturm is on a distinguished road 
Solved Threads: 24
Sturm's Avatar
Sturm Sturm is offline Offline
Veteran Poster

Re: sdl color key, don't understand

 
0
  #5
Aug 31st, 2007
heres a function that should work:
  1. SDL_Surface* getImage(string filename, int r=255, int g=0, int b=198)
  2. {
  3. SDL_Surface* loadedImage=0;
  4. SDL_Surface* optimizedImage=0;
  5.  
  6. loadedImage=IMG_Load(filename.c_str());
  7. optimizedImage = SDL_DisplayFormat(loadedImage);
  8. SDL_FreeSurface(loadedImage);
  9.  
  10. Uint32 colorkey=SDL_MapRGB(optimizedImage->format, r, g, b);
  11. SDL_SetColorKey(optimizedImage, SDL_RLEACCEL | SDL_SRCCOLORKEY, colorkey);
  12.  
  13. return optimizedImage;
  14. }
"Hey ass, don't hijack my thread. This is serious." -JoshSCH
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:



Similar Threads
Other Threads in the Game Development Forum
Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC