[笔记]音视频学习之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地址


相关文章
|
编解码 API 数据安全/隐私保护
FFmpeg中overlay滤镜用法-水印及画中画
overlay 技术又称视频叠加技术。overlay 视频技术使用非常广泛,常见的例子有,电视屏幕右上角显示的电视台台标,以及画中画功能。画中画是指在一个大的视频播放窗口中还存在一个小播放窗口,两个窗口不同的视频内容同时播放。
2039 0
FFmpeg中overlay滤镜用法-水印及画中画
|
2月前
|
C++
SDL基础使用03(渲染显示bmp图片)
如何使用SDL库在C++中创建窗口、加载BMP图片、创建纹理,并通过渲染器进行显示的完整过程。
34 2
|
2月前
|
Windows
SDL基础使用07(YUV数据显示)
使用SDL库在Windows上处理和显示YUV数据,包括生成随机YUV数据、播放YUV文件以及实现带缩放的实时渲染。
44 1
|
2月前
SDL基础使用04(SDL_image与SDL_mixer扩展库)
本文介绍了如何使用SDL_image和SDL_mixer扩展库在SDL项目中加载和显示图片以及播放音频文件。
80 1
|
7月前
|
存储 算法 编译器
【ffmpeg 到Qt的图片格式转换】精彩的像素:深入解析 AVFrame 到 QImage 的转换
【ffmpeg 到Qt的图片格式转换】精彩的像素:深入解析 AVFrame 到 QImage 的转换
255 0
实战--ffmpeg与sdl实现最简单的视频播放器
实战--ffmpeg与sdl实现最简单的视频播放器
104 0
|
编解码 iOS开发 MacOS
Alien Skin Exposure2023调色滤镜插件RAW后期处理工具
Exposure2023是一款专为摄影艺术设计的图像编辑器。新的 Exposure2023结合了专业级的照片调整、庞大的华丽照片库和令人愉悦的高效设计。可以提供最大,最准确的电影外观选择。Exposure的创意外观不仅限于电影模拟,从干净优雅的现代风格到引人注目的色彩变化。您可以自定义Exposure的每个内置外观,然后将其另存为能够表达自己风格的独特外观。只需单击一下,即可重复使用自定义的预设,以在所有工作中获得一致的外观。
145 0
|
自然语言处理
Cocos2dx接入Qt后,Text使用TTF显示异常
Cocos2dx接入Qt后,Text使用TTF显示异常
140 0
|
存储 缓存 内存技术
SDL开发笔记(二):音频基础介绍、使用SDL播放音频
SDL开发笔记(二):音频基础介绍、使用SDL播放音频
SDL开发笔记(二):音频基础介绍、使用SDL播放音频
|
JavaScript Linux 开发者
SDL文字显示
SDL本身没有显示文字功能,它需要用扩展库SDL_ttf来显示文字。ttf是TrueTypeFont的缩写,ttf是Windows下的缺省字体,它有美观,放大缩小不变形的优点,因此广泛应用很多场合。
320 0