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

简介: [笔记]音视频学习之SDL篇《六》使用SDL_ttf绘制True Type字体

准备

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 ok
  if (SDL_Init(SDL_INIT_VIDEO) != 0) {
    logSDLError(std::cout, "SDL_Init");
    return 1;
  }
  //Also need to init SDL_ttf
  if (TTF_Init() != 0) {
    logSDLError(std::cout, "TTF_Init");
    SDL_Quit();
    return 1;
  }
      //Setup our window and renderer
  SDL_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 format
  SDL_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 font
  TTF_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 texture
  SDL_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 font
  SDL_FreeSurface(surf);
  TTF_CloseFont(font);
  return texture;
}

总结

TTF_RenderText_Blended

SDL_CreateTextureFromSurface

demo地址


相关文章
|
存储 编解码 Cloud Native
C++ Qt关于多屏幕窗口处理
C++ Qt关于多屏幕窗口处理
|
算法 数据处理 开发者
FFmpeg库的使用与深度解析:解码音频流流程
FFmpeg库的使用与深度解析:解码音频流流程
250 0
|
11月前
SDL基础使用01(QtCreator)
如何在Qt Creator中创建一个C项目并使用SDL库来创建和显示一个简单的窗口。
207 1
SDL基础使用01(QtCreator)
|
存储 编解码 缓存
FFmpeg编程入门
FFmpeg编程入门
212 1
|
10月前
|
存储 安全 数据安全/隐私保护
备份SaaS数据的5个原因
【10月更文挑战第28天】SaaS虽被认为是几乎全能的解决方案,但企业仍需对业务和利润保持警惕。备份SaaS数据至关重要,原因包括:恢复过程可能缓慢;服务条款可能变化;云端数据并非永恒;人为错误难以避免;以及防止信息失控。因此,企业应确保有独立备份以应对各种风险。
210 0
|
11月前
|
测试技术 API 开发者
精通.NET单元测试:MSTest、xUnit、NUnit全面解析
【10月更文挑战第15天】本文介绍了.NET生态系统中最流行的三种单元测试框架:MSTest、xUnit和NUnit。通过示例代码展示了每种框架的基本用法和特点,帮助开发者根据项目需求和个人偏好选择合适的测试工具。
400 3
|
存储 机器学习/深度学习 数据采集
深入解析大数据核心概念:数据平台、数据中台、数据湖与数据仓库的异同与应用
深入解析大数据核心概念:数据平台、数据中台、数据湖与数据仓库的异同与应用
|
SQL 数据库 C语言
sqlite3使用入门
本文介绍了SQLite3数据库的安装与使用方法。首先通过`sudo apt install sqlite3`进行安装,并用`sqlite3 --version`验证版本。启动SQLite3后,使用`.help`查看系统维护命令,如`.database`列出数据库、`.tables`列出表等。通过标准SQL语句创建、查询、更新和删除表及数据。示例代码展示了如何使用C语言进行数据库操作,包括打开、创建表、插入数据、查询、更新和删除等基本功能。此外,还介绍了SQLite3的事务处理机制及其重要特性。
|
前端开发 JavaScript 搜索推荐
webgl canvas系列——animation中基本旋转、平移、缩放(模拟冒泡排序过程)
webgl canvas系列——animation中基本旋转、平移、缩放(模拟冒泡排序过程)
261 1
webgl canvas系列——animation中基本旋转、平移、缩放(模拟冒泡排序过程)
|
Ubuntu Linux 芯片
Linux(2)ubuntu rootfs根文件系统制作
Linux(2)ubuntu rootfs根文件系统制作
807 0