FKH
FKH

Reputation: 23

can't load bmp file with SDL_LoadBMP in CodeBlocks

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

Answers (4)

CL_BeatYeah
CL_BeatYeah

Reputation: 1

I put the .bpm in the directory and just put:

gHelloWorld = SDL_LoadBMP( "tree.bmp~" );

and it compiled fine.

Upvotes: 0

Anki Jedi
Anki Jedi

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

user6499716
user6499716

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

FKH
FKH

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

Related Questions