例9.7:设计一个程序,初始化视频子系统,设置显示模式为640*480,表面的色深为16位,使用SDL_ttf库在屏幕上显示“Linux下TrueType字体显示示例”,字体大小为38,颜色为红色。设程序名为9-7.c,存放在/home/cx/下。
准备工作:把windows下C:\WINDOWS\Fonts中的simsun.ttc文件拷贝到Linux下的/usr/share/fonts/下,用于显示中文。
编辑源程序代码:
1 #include <SDL.h> 2 #include <stdlib.h> 3 #include <SDL_ttf.h> 4 int main() 5 { 6 SDL_Surface *text, *screen; //一个屏幕指针 7 SDL_Rect drect; //目标矩形 8 TTF_Font *Nfont; //文字样式对象 9 SDL_Color red={ 255, 0, 0, 0 }; //设置字体颜色 10 int fontsize=38; //设置字体大小 11 if(SDL_Init(SDL_INIT_VIDEO) < 0){ //初始化视频子系统失败 12 fprintf(stderr,"无法初始化:%s\n",SDL_GetError()); //不能用printf(),因为没有包含stdio.h头文件 13 exit(1); 14 } 15 //设置视频模式 16 screen=SDL_SetVideoMode(640,480,16,SDL_SWSURFACE); 17 if(screen==NULL){ 18 fprintf(stderr,"无法设置视频模式:%s\n",SDL_GetError()); 19 exit(1); 20 } 21 atexit(SDL_Quit); //退出 22 23 if(TTF_Init()!=0){ //初始化字体 24 fprintf(stderr,"Can‘t init ttf font!\n"); 25 exit(1); 26 } 27 28 //打开字体库 29 Nfont=TTF_OpenFont("/usr/share/fonts/simsun.ttc",fontsize); 30 TTF_SetFontStyle(Nfont,TTF_STYLE_NORMAL); //设置字体样式 31 text=TTF_RenderUTF8_Blended(Nfont, "Linux下TureType显示示例",red); 32 TTF_CloseFont(Nfont); //关闭字体库 33 TTF_Quit(); //退出 34 drect.x=40; //在点(240,160)处开始写 35 drect.y=60; 36 drect.w=text->w; //目标矩形的宽和高分别是所写字体的宽和高 37 drect.h=text->h; 38 SDL_BlitSurface(text, NULL, screen, &drect); //把目标对象快速转化 39 SDL_UpdateRect(screen,0,0,0,0); //更新整个屏幕 40 SDL_FreeSurface(text); //释放写有文字的surface 41 SDL_Delay(5000); //让屏幕停留5秒钟的时间 42 43 return 0; 44 }
SDL做文字显示在编译链接的时候记得要加上 -I /usr/include/SDL/ -lSDL -lSDL_ttf -lpthread 啊
特别是 -lSDL_ttf ,否则会报类似 undefined reference to `TTF_Init‘ 类似的错误
如果第29行 Nfont=TTF_OpenFont("/usr/share/fonts/simsun.ttc",fontsize); 换成 Nfont=TTF_OpenFont("/usr/share/fonts/georgiai.ttc",fontsize); 即Windows下的另一种字体,编译能通过,但运行时会报段错误
另:atexit(SDL_Quit);的作用是在程序退出时调用SDL_Quit()函数,这样就不必在每个要退出的地方都调用SDL_Quit()。
最后写出来的程序运行如下
时间: 2024-10-12 04:07:09