SDL系列之 - 字体显示测试

时间:2022-09-18 22:53:56

例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/下,用于显示中文。
编辑源程序代码:

 #include <SDL.h>
#include <stdlib.h>
#include <SDL_ttf.h>
int main()
{
SDL_Surface *text, *screen; //一个屏幕指针
SDL_Rect drect; //目标矩形
TTF_Font *Nfont; //文字样式对象
SDL_Color red={ , , , }; //设置字体颜色
int fontsize=; //设置字体大小
if(SDL_Init(SDL_INIT_VIDEO) < ){ //初始化视频子系统失败
fprintf(stderr,"无法初始化:%s\n",SDL_GetError()); //不能用printf(),因为没有包含stdio.h头文件
exit();
}
//设置视频模式
screen=SDL_SetVideoMode(,,,SDL_SWSURFACE);
if(screen==NULL){
fprintf(stderr,"无法设置视频模式:%s\n",SDL_GetError());
exit();
}
atexit(SDL_Quit); //退出 if(TTF_Init()!=){ //初始化字体
fprintf(stderr,"Can't init ttf font!\n");
exit();
} //打开字体库
Nfont=TTF_OpenFont("/usr/share/fonts/simsun.ttc",fontsize);
TTF_SetFontStyle(Nfont,TTF_STYLE_NORMAL); //设置字体样式
text=TTF_RenderUTF8_Blended(Nfont, "Linux下TureType显示示例",red);
TTF_CloseFont(Nfont); //关闭字体库
TTF_Quit(); //退出
drect.x=; //在点(240,160)处开始写
drect.y=;
drect.w=text->w; //目标矩形的宽和高分别是所写字体的宽和高
drect.h=text->h;
SDL_BlitSurface(text, NULL, screen, &drect); //把目标对象快速转化
SDL_UpdateRect(screen,,,,); //更新整个屏幕
SDL_FreeSurface(text); //释放写有文字的surface
SDL_Delay(); //让屏幕停留5秒钟的时间 return ;
}

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下的另一种字体,编译能通过,但运行时会报段错误

SDL系列之 - 字体显示测试

另:atexit(SDL_Quit);的作用是在程序退出时调用SDL_Quit()函数,这样就不必在每个要退出的地方都调用SDL_Quit()。

最后写出来的程序运行如下

SDL系列之 - 字体显示测试

SDL系列之 - 字体显示测试的更多相关文章

  1. ubuntu16安装navicat字体显示不正常,显示方框以及字体倒立

    昨天遇到了这个问题,网上找了很多方法都没有真正解决这个问题. 目前其他博客论坛说的主要方法有 1)将安装目录下的./start_navicat中的字符集改为zh_CN.UTF-8 2)将系统的默认字符 ...

  2. 解决苹果手机Safari浏览器下 字体显示为 蓝色的 问题

    解决苹果手机 Safari浏览器下   字体显示为蓝色的 问题 近期测试同学测试,wap站上,底部文字在苹果8上面 ,使用 Safari浏览器打开,一直显示 蓝色字体 其他正常,寻找半天无解,最后 阳 ...

  3. python&colon; HTML之 鼠标放上去下拉项字体显示不同颜色

    鼠标放上去下拉项字体显示不同颜色 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "h ...

  4. CAD字体显示问号的解决办法

    CAD字体显示问号的解决办法1.选中问号的文字,ctrl+1查看下文字样式,以standard为例.2.运行st命令,设置standard样式的字体名为windows自带的ttf字体,例如宋体或者仿宋 ...

  5. 关于JAVA应用中文字体显示小方框的问题解决

    最近碰到linux下jboss应用中中文字体显示为小方框: “在JRE 5以上的java环境中,java会自动加载$JAVA_HOME/jre/lib/fonts目录下的字体.链接或复制宋体或微软雅黑 ...

  6. postman6 在Linux中,body和response字体显示不正常的解决方法

    在Linux中,postman的body和response使用的默认字体如果没有安装的话,会导致字体和光标的位置不一致,例如字体显示长度只有30,而光标在70的位置,导致编辑困难. 经查找css的定义 ...

  7. 解决Android版Firefox字体显示过大的问题

    在用Android版Firefox查看博客园首页发现中间区域的字体显示非常大,开始以为是首页css对移动版浏览器支持不好. 后来发现原来这是Firefox for Android的知名bug: Tha ...

  8. html lang&equals;&quot&semi;zh-cn&quot&semi;解决Mac版Firefox中文字体显示问题

    这两天在Mac下被Firefox的中文字体显示问题所困扰.在Firefox中将Sans-serif字体设置为SimSun-ExtB(新宋体)或英文字体(这时会用Mac默认中文字体),如下图: 浏览园子 ...

  9. C&num; JackLib系列之字体使用

    字体的使用一般我们都是使用系统字体,这样比较方便,直接 Font font=new Font("微软雅黑",16f,FontStyle.Bold); 但是当我们用到一个系统没有的字 ...

随机推荐

  1. 关于rc&period;local

    1.rc.loacl的启动 /etc/rc.d/rc.local

  2. javascript中无法通过div&period;style&period;left获取值的问题

    一.问题总结: 样式必须直接写在元素内部才能通过div.style.left直接获取属性值(也就是必须是内联样式才行),定义在css中的样式不能通过这种方式获取. 让元素移动到200停止 setTim ...

  3. [转&rsqb;详细介绍java中的数据结构

    详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各 ...

  4. ubuntu 永久设置dns信息

    ubuntu 自从12.04后,会自动刷写 /etc/resolv.conf 文件,导致写入的dns信息会在重启的时候丢失. ============================ 转自:http: ...

  5. Bzoj 2186&colon; &lbrack;Sdoi2008&rsqb;沙拉公主的困惑 乘法逆元&comma;线性筛&comma;欧拉函数&comma;数论

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2560  Solved: 857[Submit][St ...

  6. linux软链接的创建、删除和更新

    大家都知道,有的时候,我们为了省下空间,都会使用链接的方式来进行引用操作.同样的,在系统级别也有.在Windows系列中,我们称其为快捷方式,在Linux中我们称其为链接(基本上都差不多了,其中可能有 ...

  7. data日期转化

    eg: var time="2018-05-19T08:04:52.000+0000";      var d = new Date(time); var times=d.getF ...

  8. Java 快速排序法 冒泡排序法 选择排序法 插入排序法

    1.快速排序的原理: 选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的). 从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果 ...

  9. Ubuntu16&period;04升级 Ubuntu18&period;04

    1.更新资源 $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt dist-upgrade 2.安装update-manager-core ...

  10. 【android】activity的4种启动模式简介

    首先咱必须知道,activity是以栈(后进先出)的结构进行管理的. 当活动A启动了活动B时,A被压入到栈内,B在栈的最顶层.当B调用finish()结束活动时,B从栈弹出,此时A在栈的最顶层. 我们 ...