Reputation: 23
I am following along with the SDL2.0 tutorials by LazyFoo, using Code::Blocks 16.01. I haven't been able to load an image with SDL_LoadBMP().
This is my first time asking a question on here. I did Google for an answer and search the existing questions/answers on here but was unable to solve the issue.
This is my code:
/*This source code copyrighted by Lazy Foo' Productions (2004-2015)
and may not be redistributed without written permission.*/
//Using SDL and standard IO
#include <SDL.h>
#include <stdio.h>
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
//Starts up SDL and creates window
bool init();
//Loads media
bool loadMedia();
//Frees media and shuts down SDL
void close();
//The window we'll be rendering to
SDL_Window* gWindow = NULL;
//The surface contained by the window
SDL_Surface* gScreenSurface = NULL;
//The image we will load and show on the screen
SDL_Surface* gHelloWorld = NULL;
bool init()
{
//Initialization flag
bool success = true;
//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
success = false;
}
else
{
//Create window
gWindow = SDL_CreateWindow( "SDL Tutorial - Lesson 02", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
if( gWindow == NULL )
{
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
success = false;
}
else
{
//Get window surface
gScreenSurface = SDL_GetWindowSurface( gWindow );
}
}
return success;
}
bool loadMedia()
{
//Loading success flag
bool success = true;
//Load splash image
gHelloWorld = SDL_LoadBMP( "/02_getting_an_image_on_the_screen/hello_world.bmp" );
if( gHelloWorld == NULL )
{
printf( "Unable to load image %s! SDL Error: %s\n", "02_getting_an_image_on_the_screen/hello_world.bmp", SDL_GetError() );
success = false;
}
return success;
}
void close()
{
//Deallocate surface
SDL_FreeSurface( gHelloWorld );
gHelloWorld = NULL;
//Destroy window
SDL_DestroyWindow( gWindow );
gWindow = NULL;
//Quit SDL subsystems
SDL_Quit();
}
int main( int argc, char* args[] )
{
//Start up SDL and create window
if( !init() )
{
printf( "Failed to initialize!\n" );
}
else
{
//Load media
if( !loadMedia() )
{
printf( "Failed to load media!\n" );
}
else
{
//Apply the image
SDL_BlitSurface( gHelloWorld, NULL, gScreenSurface, NULL );
//Update the surface
SDL_UpdateWindowSurface( gWindow );
//Wait two seconds
SDL_Delay( 2000 );
}
}
//Free resources and close SDL
close();
return 0;
}
This code works correct when I specifying the whole path. But is there an easier way of doing this instead of always specifying the whole path?
Where I place the image, and how to specify it's path?
Upvotes: 1
Views: 3159
Reputation: 1
I put the .bpm in the directory and just put:
gHelloWorld = SDL_LoadBMP( "tree.bmp~" );
and it compiled fine.
Upvotes: 0
Reputation: 141
I'm a little late to give an answer, but this is something that also happens to me following LazyFoo's SDL tutorial and this is the first stackoverflow post that appears in google for this topic so this is my solution: put a dot before the folder that contain the .bmp file. "." is the current directory of the .cpp file:
//Load splash image
gHelloWorld = SDL_LoadBMP("./02_getting_an_image_on_the_screen/hello_world.bmp");
Upvotes: 0
Reputation:
Remove /02_getting_an_image_on_the_screen/
in hello_world.bmp
.
You have to place the file in your projects folder / in the same directory as your executable if you're outside of an IDE.
Upvotes: 1
Reputation: 23
I replace /02_getting_an_image_on_the_screen/hello_world.bmp
with ../02_getting_an_image_on_the_screen/hello_world.bmp
, and it works correct too. :)
Upvotes: 1