I am using IMG_Load () to load a png file, but it just doesn't work. loadImage = IMG_Load (filename.c_str ()); after this sentence, loadImage is still NULL, not an error. PS: I am using VS C ++ 2008, the png file is in the development folder. Here is my code: (This is exactly what Lazy Foo likes)
//The headers #include "SDL.h" #include "SDL_image.h" #include <string> #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) //Screen attributes const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; const int SCREEN_BPP = 32; //The surfaces SDL_Surface *image = NULL; SDL_Surface *screen = NULL; SDL_Surface *load_image( std::string filename ) { //The image that loaded SDL_Surface* loadedImage = NULL; //The optimized image that will be used SDL_Surface* optimizedImage = NULL; //Load the image using SDL_image loadedImage = IMG_Load(filename.c_str()); //If the image loaded if( loadedImage != NULL ) { //Create an optimized image //cout<<"Flag"; optimizedImage = SDL_DisplayFormat( loadedImage ); //Free the old image SDL_FreeSurface( loadedImage ); } //Return the optimized image return optimizedImage; } void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination ) { //Rectangle to hold the offsets SDL_Rect offset; //Get 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 false; } //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 false; } //Set the window caption SDL_WM_SetCaption( "PNG test", NULL ); //If everything initialized fine return true; } void clean_up() { //Free the surface SDL_FreeSurface( image ); //Quit SDL SDL_Quit(); } int main( int argc, char* args[] ) { //Initialize if( init() == false ) { return 1; } //Load the image image = load_image( "look.png" ); //If there was a problem in loading the image if( image == NULL ) { return 5; } //Apply the surface to the screen apply_surface( 0, 0, image, screen ); //Update the screen if( SDL_Flip( screen ) == -1 ) { return 1; } //Wait 2 seconds SDL_Delay( 2000 ); //Free the surface and quit SDL clean_up(); return 0; }
Output 5.
source share