ウインドウが表示されたのはいいけど、画像なしの黒い画面じゃ面白くないですよね。
とりあえずビットマップファイルを1つ用意して、「sample.bmp」に改名してください。
あとはこのプログラムを実行させます。
#include <SDL/SDL.h>
int main(int argc, char* argv[]){
	SDL_Surface* image;
	SDL_Rect rect, scr_rect;
	SDL_Init(SDL_INIT_EVERYTHING);
	SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
	/* 画像読み込み */
	image = SDL_LoadBMP("sample.bmp");
	/* 画像の矩形情報設定 */
	rect.x = 0;
	rect.y = 0;
	rect.w = image->w;
	rect.h = image->h;
	/* 画像配置位置情報の設定 */
	scr_rect.x = 0;
	scr_rect.y = 0;
	/* サーフェスの複写 */
	SDL_BlitSurface(image, &rect, SDL_GetVideoSurface(), &scr_rect);
	/* サーフェスフリップ */
	SDL_Flip(SDL_GetVideoSurface());
	SDL_Delay(3000);
	SDL_FreeSurface(image);
	SDL_Quit();
	return 0;
}
実際には、読み込めたかどうか確認する(= imageがNULLでないことを確認する)必要がありますが、割愛します。
SDL_Surfaceは画面に表示する画像フォーマットと考えてください。画面に表示するには、
の3段階のステップを踏みます。SDL_Surfaceは構造体ですので、上のプログラムではその中から幅と高さの情報を見ています。構造体の中身はSDL_video.hから見ることができます。各項目の詳細はWikiなどで確認できます。★
typedef struct SDL_Surface {
	Uint32 flags;				/* Read-only */
	SDL_PixelFormat *format;		/* Read-only */
	int w, h;				/* Read-only */
	Uint16 pitch;				/* Read-only */
	void *pixels;				/* Read-write */
	int offset;				/* Private */
	/* Hardware-specific surface info */
	struct private_hwdata *hwdata;
	/* clipping information */
	SDL_Rect clip_rect;			/* Read-only */
	Uint32 unused1;				/* for binary compatibility */
	/* Allow recursive locks */
	Uint32 locked;				/* Private */
	/* info for fast blit mapping to other surfaces */
	struct SDL_BlitMap *map;		/* Private */
	/* format version, bumped at every change to invalidate blit maps */
	unsigned int format_version;		/* Private */
	/* Reference count -- used when freeing surface */
	int refcount;				/* Read-mostly */
} SDL_Surface;
x座標とy座標、幅、高さを持つ構造体です。
typedef struct SDL_Rect {
        Sint16 x, y;
        Uint16 w, h;
} SDL_Rect;
画像の配置などで使います。
画像の表示は読み込み、ディスプレイサーフェスへの複写、フリップの3ステップで行います。順に見ていきましょう。
SDL_Surface *SDL_LoadBMP(const char *file);
ビットマップファイルを読み込んで、SDL_Surfaceを作成します。fileはファイル名を指定。ファイルはビットマップファイルでなければなりません。PNGファイルなどを読み込む方法は後述します。
作成したSDL_Surfaceは他のSDL関数で使用します。
int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);
SDL_Surfaceの複写をします。srcは複写元のサーフェス、dstは複写先のサーフェスで、dstにsrcを描くというイメージです。
srcrectは複写元のサーフェスサイズのSDL_Rect構造体で、srcのサイズと同じサイズにすれば、全体がdstに描かれます。一部を指定した場合、例えば、xとyを0にしてwとhを画像全体の縦、横のサイズの半分にすれば、画像の左上1/4が描かれることになります。右下1/4を描きたい場合は・・・。大丈夫ですね。
dstrectは複写先の位置、つまり、どこに描くかということを指定します。SDL_Rect構造体はx,y,w,hの4つのメンバーをもっているので、srcrectのwやhよりdstrectのwやhが大きい場合は、拡大表示される・・・と思いきや、SDL_BlitSurfaceに拡大縮小機能はないので、別の関数を使う必要があります。これには別のライブラリが必要になりますので、ここでは省略します。
上のプログラムでは、dstにSDL_GetVideoSurface()の結果、つまりビデオサーフェスを指定していますが、ビデオサーフェスではない、SDL_Surfaceも指定できます。画像を組み合わせて合成したりすることも可能です。
int SDL_Flip(SDL_Surface* screen);
SDL_BlitSurface()でディスプレイサーフェスに描画したものを画面に反映させます。screenにはSDL_GetVideoSurface()の返り値をセットすればいいでしょう。
なお、不要になったSDL_SurfaceはSDL_FreeSurface()で破棄します。
void SDL_FreeSurface(SDL_Surface* surface);
surfaceには破棄したいSDL_Surfaceを指定します。