第六节: 使用SDL_ttf绘制True Type字体

文章目录

  • 准备
  • 目的
  • 初始化,创建窗口、渲染器等
  • 载入字体内容并绘制
  • 总结
    • TTF_RenderText_Blended
    • SDL_CreateTextureFromSurface

准备

SDL_ttf库

配置dll和lib 我就不细说了可以模仿我demo用cmake配置
头文件放SDL.h同一个目录

sample.ttf SourceSansPro-Regular 字体文件

目的

使用ttf字体文件 进行文字的渲染
也就是使用ttf文件 自定义文字的字体显示

主要绘制一行"Shiver Is Best Awesome"消息文本

初始化,创建窗口、渲染器等

TTF_Init() tif初始化

//Start up SDL and make sure it went okif (SDL_Init(SDL_INIT_VIDEO) != 0) {logSDLError(std::cout, "SDL_Init");return 1;}//Also need to init SDL_ttfif (TTF_Init() != 0) {logSDLError(std::cout, "TTF_Init");SDL_Quit();return 1;}//Setup our window and rendererSDL_Window* window = SDL_CreateWindow("Lesson 6",   SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);if (window == nullptr) {logSDLError(std::cout, "CreateWindow");TTF_Quit();SDL_Quit();return 1;}SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);if (renderer == nullptr) {logSDLError(std::cout, "CreateRenderer");cleanup(window);TTF_Quit();SDL_Quit();return 1;}

载入字体内容并绘制

绘制文字需要:
1.消息文本message
2.字体文件fontFile
3.字体颜色color
4.字体大小fontSize

const std::string resPa
th = getResourcePath("Lesson6");//We'll render the string "TTF fonts are cool!" in white//Color is in RGB formatSDL_Color color = { 255, 255, 255, 255 };SDL_Texture* image = renderText("Shiver is best Aswsome", "..\\..\\res\\06sdl_learn\\sample.ttf", color, 64, renderer);if (image == nullptr) {cleanup(image, renderer, window);TTF_Quit();SDL_Quit();return 1;}

绘制字体过程:
1.打开字体文件
2.先根据render,message,color 创建Surface
3.使用Surface创建Texture

SDL_Texture* renderText(const std::string& message, const std::string& fontFile, SDL_Color color,int fontSize, SDL_Renderer* renderer)
{//Open the fontTTF_Font* font = TTF_OpenFont(fontFile.c_str(), fontSize);if (font == nullptr) {logSDLError(std::cout, "TTF_OpenFont");return nullptr;}//We need to first render to a surface as that's what TTF_RenderText returns, then//load that surface into a textureSDL_Surface* surf = TTF_RenderText_Blended(font, message.c_str(), color);if (surf == nullptr) {TTF_CloseFont(font);logSDLError(std::cout, "TTF_RenderText");return nullptr;}SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surf);if (texture == nullptr) {logSDLError(std::cout, "CreateTexture");}//Clean up the surface and fontSDL_FreeSurface(surf);TTF_CloseFont(font);return texture;
}

总结

TTF_RenderText_Blended

SDL_CreateTextureFromSurface

demo地址

[笔记]音视频学习之SDL篇《六》使用SDL_ttf绘制True Type字体相关推荐

  1. [笔记]音视频学习之SDL篇《五》裁剪图片成子图片(裁剪精灵表)

    第五节:裁剪精灵表 文章目录 目的 初始化 创建窗口 载入图片 确认裁剪坐标 确认裁剪显示坐标 确认裁剪大小的圆为100*100 按下1,2,3,4显示不同裁剪图片 总结 ApplySurface S ...

  2. [笔记]音视频学习之视音频数据处理入门《五》FLV封装格式解析

    视音频数据处理入门:FLV封装格式解析 视音频数据处理入门:UDP-RTP协议解析 文章目录 前言 总结 前言 总结

  3. Android音视频学习系列(六) — 掌握视频基础知识并使用OpenGL ES 2.0渲染YUV数据

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  4. 音视频开发之旅(32)-音视频学习资料

    目录 为什么要学习音视频? 如何学习系统性音视频? 音视频相关的资料 学习实践的输出文章分类聚合 收获 最近有朋友问想学习音视频,应该怎么学,有什么资料吗? 这个问题也困扰我很久,几年前就想开始音视频 ...

  5. Android音视频学习系列(五) — 掌握音频基础知识并使用AudioTrack、OpenSL ES渲染PCM数据

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  6. Android音视频学习系列(七) — 从0~1开发一款Android端播放器(支持多协议网络拉流本地文件)

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  7. Android音视频学习系列(八) — 基于Nginx搭建(rtmp、http)直播服务器

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  8. Android音视频学习系列(九) — Android端实现rtmp推流

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  9. 音视频学习(三、rtmp推流)

    本来是想先写这一篇的,结果写完了之后,测试,竟然推不出去,尴尬,所以赶紧去补了一下FLV格式的原理,因为这个rtmp推流推的就是flv格式,但是顺序还是不变,还是写推流,你们也可以先看FLV格式解析, ...

最新文章

  1. 机器学习与高维信息检索 - Note 4 - 主成分分析及其现代解释(Principal Component Analysis, PCA)及相关实例
  2. Linux kernel 不输出log信息
  3. C#.NET 连接 Access操作类
  4. XCTF WEB weak_auth
  5. c语言贪心算法背包问题_GGTalk 中的算法知识 01背包问题
  6. jQuery 开发环境搭配(转)
  7. C# lambda表达式与匿名方法
  8. java 排序性能_Java8排序–性能陷阱
  9. etabs数据_etabs使用经验
  10. 处理中文乱码以及登陆验证的过滤器Filter(建议收藏)
  11. C++ 设计模式 —— 策略模式(Strategy)
  12. Codeigniter开发技巧:连接多个数据库(可实现DB读写分离)
  13. mysql加入时间戳sql语句,SQL插入时间戳问题
  14. matlab 菱形符号,matlab 图形符号
  15. 结构化、半结构化和非结构化数据
  16. linux u盘版下载官网,Linux助手:Universal USB Installer新版下载
  17. 【任务分解】 向埃隆·马斯克学习任务分解
  18. 如何给原图添加文字水印和图片水印
  19. 【3D视觉创新应用竞赛作品系列​】轻量化、松耦合的手持RGB-D室内环境实时重建系统
  20. Eclipse Debug不为人知的秘密

热门文章

  1. HTML-12:超链接锚点定位
  2. qq家园文字版二战风云的建筑类型
  3. 无法超越,1994 电影史上的巅峰
  4. 李开复给中国大学生的第一封信——从诚信谈起
  5. MVC的一幅简单素描
  6. 谈谈深度学习中的 Batch_Size Batch_Size(批尺寸)是机器学习中一个重要参数,涉及诸多矛盾,下面逐一展开。 首先,为什么需要有 Batch_Size 这个参数? Batch 的选
  7. RK3399平台开发系列讲解(内核入门篇)1.1、通过sysfs清楚了解设备的系统状况
  8. stegano(图片隐写、摩斯密码)
  9. DC初级摄友必学摄影技巧(转贴) 1
  10. 计算机教师年终考核,2021年计算机教师年终考核个人总结.doc