any help? i am following the code given from lazyfoo’s tutorial #5 on
colorkeying and when i run it it doesnt work! help?
here is a video of the problem http://www.youtube.com/watch?v=1gjXZmHLc6k
any help? i am following the code given from lazyfoo’s tutorial #5 on
colorkeying and when i run it it doesnt work! help?
here is a video of the problem http://www.youtube.com/watch?v=1gjXZmHLc6k
Hi.
See http://www.libsdl.org/cgi/docwiki.cgi/SDL_BlitSurface for SDL’s
blitting algorithm. In certain circumstances, the colour key is
ignored. One of those cases is where the surface has an alpha channel.
You are loading a PNG file.
Consider in future attaching your code rather than posting a video. It
makes it easy for us to try the code on our own machines. I had to
watch very carefully to see the image names in your video.
Regards,
– BrianOn 19 August 2011 21:08, .:. .:. wrote:
any help? i ?am following the code given from lazyfoo’s tutorial #5 on
colorkeying and when i run it it doesnt work!help?
here is a video of the problemhttp://www.youtube.com/watch?v=1gjXZmHLc6k
thanks but what i dont understand is that the code should work because it
was lazy foo’s and thats how he did it? oh well . . .
[code]/*This source code copyrighted by Lazy Foo’ Productions (2004-2011)
and may not be redestributed without written permission.*/
//The headers
#include “SDL/SDL.h”
#include “SDL/SDL_image.h”
#include
//Screen attributes
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;
//The surfaces
SDL_Surface *background = NULL;
SDL_Surface *foo = NULL;
SDL_Surface *screen = NULL;
//The event structure
SDL_Event event;
SDL_Surface *load_image( std::string filename )
{
//The image that's loaded
SDL_Surface* loadedImage = NULL;
//The optimized image that will be used
SDL_Surface* optimizedImage = NULL;
//Load the image
loadedImage = IMG_Load( filename.c_str() );
//If the image loaded
if( loadedImage != NULL )
{
//Create an optimized image
optimizedImage = SDL_DisplayFormat( loadedImage );
//Free the old image
SDL_FreeSurface( loadedImage );
//If the image was optimized just fine
if( optimizedImage != NULL )
{
//Map the color key
Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 0, 0xFF,
0xFF );
//Set all pixels of color R 0, G 0xFF, B 0xFF to be transparent
SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, colorkey );
}
}
//Return the optimized image
return optimizedImage;
}
void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface*
destination )
{
//Temporary rectangle to hold the offsets
SDL_Rect offset;
//Get the offsets
offset.x = x;
offset.y = y;
//Blit the surface
SDL_BlitSurface( source, NULL, destination, &offset );
}
bool init()
{
//Initialize all SDL subsystems
if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
{
return 1;
}
//Set up the screen
screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,
SDL_SWSURFACE );
//If there was an error in setting up the screen
if( screen == NULL )
{
return 1;
}
//Set the window caption
SDL_WM_SetCaption( "Foo says \"Hello!\"", NULL );
//If everything initialized fine
return true;
}
bool load_files()
{
//Load the background image
background = load_image( "background.png" );
//If the background didn't load
if( background == NULL )
{
return false;
}
//Load the stick figure
foo = load_image( "foo.png" );
//If the stick figure didn't load
if( foo == NULL )
{
return false;
}
return true;
}
void clean_up()
{
//Free the surfaces
SDL_FreeSurface( background );
SDL_FreeSurface( foo );
//Quit SDL
SDL_Quit();
}
int main( int argc, char* args[] )
{
//Quit flag
bool quit = false;
//Initialize
if( init() == false )
{
return 1;
}
//Load the files
if( load_files() == false )
{
return 1;
}
//Apply the surfaces to the screen
apply_surface( 0, 0, background, screen );
apply_surface( 240, 190, foo, screen );
//Update the screen
if( SDL_Flip( screen ) == -1 )
{
return 1;
}
//While the user hasn't quit
while( quit == false )
{
//While there's events to handle
while( SDL_PollEvent( &event ) )
{
//If the user has Xed out the window
if( event.type == SDL_QUIT )
{
//Quit the program
quit = true;
}
}
}
//Free the surfaces and quit SDL
clean_up();
return 0;
}[/code]
sorry for not posting the code hah my badOn Fri, Aug 19, 2011 at 6:15 PM, Brian Barrett <brian.ripoff at gmail.com>wrote:
Hi.
See http://www.libsdl.org/cgi/docwiki.cgi/SDL_BlitSurface for SDL’s
blitting algorithm. In certain circumstances, the colour key is
ignored. One of those cases is where the surface has an alpha channel.
You are loading a PNG file.Consider in future attaching your code rather than posting a video. It
makes it easy for us to try the code on our own machines. I had to
watch very carefully to see the image names in your video.Regards,
– BrianOn 19 August 2011 21:08, .:. .:. <@NOmNOmNOm> wrote:
any help? i am following the code given from lazyfoo’s tutorial #5 on
colorkeying and when i run it it doesnt work!help?
here is a video of the problem
http://www.youtube.com/watch?v=1gjXZmHLc6k
SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
2011/8/19 .:. .:. :
thanks
but what i dont understand is that the code should work because it
was lazy foo’s and thats how he did it? oh well . . .[code]/*This source code copyrighted by Lazy Foo’ Productions (2004-2011)
and may not be redestributed without written permission.*/
//The headers
#include “SDL/SDL.h”
#include “SDL/SDL_image.h”
#include
//Screen attributes
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;
//The surfaces
SDL_Surface *background = NULL;
SDL_Surface *foo = NULL;
SDL_Surface *screen = NULL;
//The event structure
SDL_Event event;
SDL_Surface *load_image( std::string filename )
{
? ? //The image that’s loaded
? ? SDL_Surface* loadedImage = NULL;
? ? //The optimized image that will be used
? ? SDL_Surface* optimizedImage = NULL;
? ? //Load the image
? ? loadedImage = IMG_Load( filename.c_str() );
? ? //If the image loaded
? ? if( loadedImage != NULL )
? ? {
? ? ? ? //Create an optimized image
? ? ? ? optimizedImage = SDL_DisplayFormat( loadedImage );
? ? ? ? //Free the old image
? ? ? ? SDL_FreeSurface( loadedImage );
? ? ? ? //If the image was optimized just fine
? ? ? ? if( optimizedImage != NULL )
? ? ? ? {
? ? ? ? ? ? //Map the color key
? ? ? ? ? ? Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 0, 0xFF,
0xFF );? ? ? ? ? ? //Set all pixels of color R 0, G 0xFF, B 0xFF to be transparent
? ? ? ? ? ? SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, colorkey );
? ? ? ? }
? ? }
? ? //Return the optimized image
? ? return optimizedImage;
}
void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface*
destination ){
? ? //Temporary rectangle to hold the offsets
? ? SDL_Rect offset;
? ? //Get the offsets
? ? offset.x = x;
? ? offset.y = y;
? ? //Blit the surface
? ? SDL_BlitSurface( source, NULL, destination, &offset );
}
bool init()
{
? ? //Initialize all SDL subsystems
? ? if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
? ? {
? ? ? ? return 1;
? ? }
? ? //Set up the screen
? ? screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,
SDL_SWSURFACE );? ? //If there was an error in setting up the screen
? ? if( screen == NULL )
? ? {
? ? ? ? return 1;
? ? }
? ? //Set the window caption
? ? SDL_WM_SetCaption( “Foo says “Hello!””, NULL );
? ? //If everything initialized fine
? ? return true;
}
bool load_files()
{
? ? //Load the background image
? ? background = load_image( “background.png” );
? ? //If the background didn’t load
? ? if( background == NULL )
? ? {
? ? ? ? return false;
? ? }
? ? //Load the stick figure
? ? foo = load_image( “foo.png” );
? ? //If the stick figure didn’t load
? ? if( foo == NULL )
? ? {
? ? ? ? return false;
? ? }
? ? return true;
}
void clean_up()
{
? ? //Free the surfaces
? ? SDL_FreeSurface( background );
? ? SDL_FreeSurface( foo );
? ? //Quit SDL
? ? SDL_Quit();
}
int main( int argc, char* args[] )
{
? ? //Quit flag
? ? bool quit = false;
? ? //Initialize
? ? if( init() == false )
? ? {
? ? ? ? return 1;
? ? }
? ? //Load the files
? ? if( load_files() == false )
? ? {
? ? ? ? return 1;
? ? }
? ? //Apply the surfaces to the screen
? ? apply_surface( 0, 0, background, screen );
? ? apply_surface( 240, 190, foo, screen );
? ? //Update the screen
? ? if( SDL_Flip( screen ) == -1 )
? ? {
? ? ? ? return 1;
? ? }
? ? //While the user hasn’t quit
? ? while( quit == false )
? ? {
? ? ? ? //While there’s events to handle
? ? ? ? while( SDL_PollEvent( &event ) )
? ? ? ? {
? ? ? ? ? ? //If the user has Xed out the window
? ? ? ? ? ? if( event.type == SDL_QUIT )
? ? ? ? ? ? {
? ? ? ? ? ? ? ? //Quit the program
? ? ? ? ? ? ? ? quit = true;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? //Free the surfaces and quit SDL
? ? clean_up();
? ? return 0;
}[/code]
sorry for not posting the code hah my bad
Hi.
See http://www.libsdl.org/cgi/docwiki.cgi/SDL_BlitSurface for SDL’s
blitting algorithm. In certain circumstances, the colour key is
ignored. One of those cases is where the surface has an alpha channel.
You are loading a PNG file.Consider in future attaching your code rather than posting a video. It
makes it easy for us to try the code on our own machines. I had to
watch very carefully to see the image names in your video.Regards,
? ? – Brianany help? i ?am following the code given from lazyfoo’s tutorial #5 on
colorkeying and when i run it it doesnt work!help?
here is a video of the problem
http://www.youtube.com/watch?v=1gjXZmHLc6k
SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
Probably is what Brian said previously - you are loading png files and
the chances they have an alpha channel is fairly big, given that you
are a novice. The code is alright. Try removing the alpha channel of
the image with whatever editor you have there (i’d recomend gimp).> On Fri, Aug 19, 2011 at 6:15 PM, Brian Barrett <brian.ripoff at gmail.com> wrote:
On 19 August 2011 21:08, .:. .:. wrote:
–
Leonardo
Hi,
I tried the code and files from Lazy Foo’s site, it worked for me on
Windows 7. Can you check the return value of SDL_SetColorKey()? If you
remove the call to SDL_DisplayFormat() (while keeping the call to
SDL_SetColorKey()) does it work?On 20 August 2011 00:24, .:. .:. wrote:
thanks
but what i dont understand is that the code should work because it
was lazy foo’s and thats how he did it? oh well . . .