After you've loaded an image, it's a good idea to convert it to the format of the surface you wish to draw it on before drawing it there.
This makes copying (known as "blitting") much faster, since you do it once, before you ever copy it, rather than each time you copy it.
You can either use SDL_ConvertSurface(), or just use SDL_DisplayFormat() (which calls SDL_ConvertSurface internally):
Note: Also make sure to test if SDL_DisplayFormat() was successful (non-NULL).SDL_Surface * temp, * image; temp = SDL_LoadBMP(file); ... image = SDL_DisplayFormat(temp); SDL_FreeSurface(temp);