目录

一.SDL_TTF库渲染文字的流程

1.1TTF_Init初始化TTF的全局环境

1.2 TTF_OpenFont打开字符库

1.3TTF_RenderUTF8_Solid

1.4 填充SDL_PixelFormat信息

1.5 SDL_ConvertSurface

二.实战代码

三运行结果

上面是这个程序运行的效果,保存了一张bmp的位图。这个位图就是2024-12-18 11:38的字符串。

四运行时报的错误


一.SDL_TTF库渲染文字的流程

上面是SDL_TTF输出文字图层的几个重点步骤,分别是ttf_init初始化、TTF_OpenFont打开字符库、TTF_RenderUTF8_Solid渲染字体、填充SDL_PixelFormat信息、SDL_ConvertSurface进行像素转换

1.1TTF_Init初始化TTF的全局环境

它的作用是初始化TTF的库,是做SDL_TTF渲染的第一步

1.2 TTF_OpenFont打开字符库

它的作用是打开字体库,同时设置字体的大小,我们来看看它的传参

TTF_Font * SDLCALL TTF_OpenFont(const char *file, int ptsize);

第一个参数:需要加载的字符库的名称,我们这里选择的是方正字库fzlth.ttf。

第二个参数:设置字体的大小,方正字库48效果最好。

1.3TTF_RenderUTF8_Solid

对输入的字符串进行渲染

SDL_Surface * SDLCALL TTF_RenderUTF8_Solid(TTF_Font *font, const char *text, SDL_Color fg);

第一个参数:TTF_Font结构体指针

第二个参数:需要渲染的字符串

第三个参数:字体颜色的设置,用SDL_Color进行设置,这个结构体分别是r、g、b三种颜色进行设置,这里的rgb都是用16进制表示。在本实例中我用三个0xff代表的是三个255,也就是字体是白色。

1.4 填充SDL_PixelFormat信息

SDL_PixelFormat主要是填充一些像素信息,其中重点设置的参数就上面那几个。

1.4.1. BitsPerPixel:SDL的每个像素位

1.4.2. BytesPerPixel:SDL的每个像素占的字节数

1.5 SDL_ConvertSurface

SDL_ConvertSurface对渲染的字体进行像素转换,转换成位图

SDL_Surface * SDLCALL SDL_ConvertSurface (SDL_Surface *src, SDL_PixelFormat *fmt, Uint32 flags);

第一个参数:SDL_Surface结构体指针

第二个参数:SDL_PixelFormat结构体指针

第三个参数:标识符,默认为0

二.实战代码

#include <assert.h>
#include <fcntl.h>
#include <getopt.h>
#include <pthread.h>
#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

// #include "common/sample_common.h"
#include "rkmedia_api.h"

#include <stdio.h>
#include "SDL.h"
#include "SDL_ttf.h"
#include <time.h>

int main()
{
    char *pstr = "2024-12-18 11:38";
    SDL_PixelFormat *fmt;
    TTF_Font *font;
    SDL_Surface *text, *temp;

    //初始化SDL_TTF的全局参数
    if (TTF_Init() < 0)
    {
        fprintf(stderr, "Couldn't initialize TTF: %s\n", SDL_GetError());
        SDL_Quit();
    }

    //使用了fzlth.ttf字库(方正字库),字体大小最合适设置为48
    font = TTF_OpenFont("./fzlth.ttf", 48);
    if (font == NULL)
    {
        fprintf(stderr, "Couldn't load %d pt font from %s: %s\n", 48, "ptsize", SDL_GetError());
    }

    ////字体颜色是黑色,0xff=255, 0xff=255,0xff=255,rgb={255,255,255}
    SDL_Color forecol = {0xff, 0xff, 0xff, 0xff};
    //SDL_Color forecol = {0x00, 0x00, 0x00, 0xff};
    text = TTF_RenderUTF8_Solid(font, pstr, forecol); //对输入的字符串进行渲染

    fmt = (SDL_PixelFormat *)malloc(sizeof(SDL_PixelFormat));
    memset(fmt, 0, sizeof(SDL_PixelFormat));
    fmt->BitsPerPixel = 16; //SDL的每个像素位
    fmt->BytesPerPixel = 2; //SDL的每个像素占的字节数
    temp = SDL_ConvertSurface(text, fmt, 0); //SDL_ConvertSurface对渲染的字体进行像素转换,转换成位图
    SDL_SaveBMP(temp, "save.bmp");//保存位图

    SDL_FreeSurface(text);
    SDL_FreeSurface(temp);
    TTF_CloseFont(font);
    TTF_Quit();

    return 0;
}

    三运行结果

    上面是这个程序运行的效果,保存了一张bmp的位图。这个位图就是2024-12-18 11:38的字符串。

      四运行时报的错误

      上面这个错误是缺少了libSDL_ttf-2.0.so.0的库,此时要把libSDL_ttf-2.0.so.0放在/usr/lib下面

      上面这个错误是缺少了libSDL-1.2.so.0的库,此时要把libSDL-1.2.so.0放在/usr/lib下面

      Logo

      有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

      更多推荐