SDL多媒体库介绍
SDL(Simple DirectMedia Layer,简单直接的媒体层)是一个自由的跨平台的多媒体开发包,它已经被成功运用于许多多媒体处理程序中,它也是一些其它多媒体库的基础。本章介绍SDL多媒体库的编程的基本接口,读者可以以此为基础,再着手研究其他的多媒体库,或在SDL基础上构建自己的多媒体库。SDL主要特性包括(见SDL文档)如下表所示。
表SDL主要特性
分类 | 说明 |
视频 |
|
事件 |
|
音频 |
|
CD音频 |
|
线程 |
|
定时器 |
|
字节序无关 |
|
2 SDL编程实例
2.1 初始化SDL库
调用SDL库需要包含SDL头文件,并在编译时链接SDL库。调用SDL函数之前必须初始化SDL库。
- 初始化SDL库
int SDL_Init(Uint32 flags); |
SDL_Init可以通过flags参数指定需要初始化的子系统。flags选项如表22.2所示。
表 子系统的初始化宏
子系统 | 说明 |
SDL_INIT_TIMER | 初始化时间子系统 |
SDL_INIT_AUDIO | 初始化音频子系统 |
SDL_INIT_VIDEO | 初始化视频子系统 |
SDL_INIT_CDROM | 初始化CDROM子系统 |
SDL_INIT_JOYSTICK | 初始化JOYSTICK子系统 |
SDL_INIT_EVERYTHING | 初始化上述所有子系统 |
SDL_INIT_NOPARACHUTE | 避免捕获致命错误 |
SDL_INIT_EVENTTHREAD | 初始化线程子系统 |
- 初始化子系统
int SDL_InitSubSystem(Uint32 flags); |
- 关闭SDL下某个子系统
void SDL_QuitSubSystem(Uint32 flags); |
- 关闭SDL 库
void SDL_Quit(void); |
- 检查哪个子系统被初始化
Uint32 SDL_WasInit(Uint32 flags); |
如果SDL函数出错,可以用SDL_GetError获取错误信息:
char *SDL_GetError(void); |
2.2SDL表面操作
SDL表面代表一个显示区域。
- 建立一个表面
SDL_Surface *SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags); |
wdth为宽度,height为高度,bpp为像素深度,如果为0,表示使用当前的像素深度,flags标志如表22.3所示。
表SDL_SetVideoMode标志
标志 | 说明 |
SDL_SWSURFACE | 在系统内存创建表面 |
SDL_HWSURFACE | 在视频内存创建表面 |
SDL_ASYNCBLIT | 运行表面的异步更新 |
SDL_ANYFORMAT | 通常如果指定的像素深度的视频表面不存在,则SDL将模拟一个。这个标志禁止这种做法。 |
SDL_DOUBLEBUF | 使能双缓冲 |
SDL_FULLSCREEN | 全屏模式 |
SDL_OPENGL | 创建一个OpenGL渲染环境 |
SDL_RESIZABLE | 窗口可变尺寸 |
SDL_NOFRAME | 创建一个无边框和标题的窗口。 |
- 使用指定颜色填充某个区域
int SDL_FillRect(SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color); |
- 转换显示面到屏幕相同的格式
SDL_Surface *SDL_DisplayFormat(SDL_Surface *surface); |
- 更新屏幕区域
void SDL_UpdateRect(SDL_Surface *screen, Sint32 x, Sint32 y, Sint32 w, Sint32 h); void SDL_UpdateRects(SDL_Surface *screen, int numrects, SDL_Rect *rects); |
SDL_UpdateRects将更新一组屏幕区域。
- 交换视频缓冲,主要用于双缓冲模式
int SDL_Flip(SDL_Surface *screen); |
- 释放表面
void SDL_FreeSurface(SDL_Surface *surface); |
2.3加载和显示图片
SDL支持BMP图片,使用SDL_LoadBMP可加载一张位图。如果要支持其他格式,需要安装SDL_Image库。SDL提供的BMP位图的操作函数如下:
- 加载位图
SDL_Surface *SDL_LoadBMP(const char *file); |
SDL_LoadBMP用来导入BMP图象。图象如果导入成功,将保存在一个SDL表面中。
- 粘贴表面
|
SDL_BlitSurface
函数通常用来将一张图象贴在屏幕上,src表示要贴的图象表面,dst表示屏幕表面。Srcrect为原图像的显示区域,dstrect为屏幕显示位置。
- 保存SDL表面为BMP图片
int SDL_SaveBMP(SDL_Surface *surface, const char *file); |
【声明】开源文档,请勿用于商业用途。转载请注明文章出处:linux乐园(www.linuxview.net),作者:fgjnew@163.com,2010-4-1.