编译 freetype、sdl、sdl_ttf

/*
 * three lib
 */
    /* 字符串生成位图 */
    http://www.libsdl.org/projects/SDL_ttf/release/
    http://www.libsdl.org/download-1.2.php
    https://freetype.org/      

    /* Freetype 2.13.0 */
    ./configure CC=aarch64-v01c01-linux-gnu-gcc --build=aarch64 --host=aarch64-v01c01-linux-gnu --enable-shared=no --enable-static=yes --with-zlib=no --prefix=/home/share/work/osd/three-lib/freetype/ --exec-prefix=/home/share/work/osd/three-lib/freetype


    /* SDL 2.30.3 */
    ./configure CC=aarch64-v01c01-linux-gnu-gcc --build=aarch64 --host=aarch64-v01c01-linux-gnu --enable-shared=no --enable-static=yes --enable-video-wayland=no --enable-pulseaudio=no --prefix=/home/share/work/osd/three-lib/sdl/ --exec-prefix=/home/share/work/osd/three-lib/sdl

    /* SDL_tff 2.22.0 */
    ./configure CC=aarch64-v01c01-linux-gnu-gcc --build=aarch64 --host=aarch64-v01c01-linux-gnu --enable-shared=no --enable-static=yes --prefix=/home/share/work/osd/three-lib/sdl_ttf/ --exec-prefix=/home/share/work/osd/three-lib/sdl_ttf --with-sdl-prefix=/home/share/work/osd/three-lib/sdl --with-sdl-exec-prefix=/home/share/work/osd/three-lib/sdl --with-ft-prefix=/home/share/work/osd/three-lib/freetype/ --with-ft-exec-prefix=/home/share/work/osd/three-lib/freetype

例子:

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


int main(int argc, const char *argv[])
{
    char * pstr = "2024-06-04 18:00:29";
    SDL_PixelFormat *fmt;
    TTF_Font *font;  
    SDL_Surface *text, *temp;  

    if (TTF_Init() < 0 )
    {  
        fprintf(stderr, "Couldn't initialize TTF: %s\n",SDL_GetError());  
        SDL_Quit();
    }  

    font = TTF_OpenFont("Roboto-Regular.ttf", 48);
    if ( font == NULL )
    {  
        fprintf(stderr, "Couldn't load %d pt font from %s: %s\n", 48, "ptsize", SDL_GetError());  
    }  

    SDL_Color forecol = {  0xff, 0xff, 0xff, 0xff };  
    text = TTF_RenderUTF8_Solid(font, pstr, forecol);

    fmt = (SDL_PixelFormat*)malloc(sizeof(SDL_PixelFormat));
    memset(fmt,0,sizeof(SDL_PixelFormat));
    fmt->BitsPerPixel = 16;
    fmt->BytesPerPixel = 2;
    //fmt->colorkey = 0xffffffff;
    //fmt->alpha = 0xff;

    temp = SDL_ConvertSurface(text, fmt, 0);
    SDL_SaveBMP(temp, "save.bmp");

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

    return 0;
}

例子编译:

    /* test */        
    /* gcc 依赖库是从右往左 */
    aarch64-v01c01-linux-gnu-gcc -o osd_test test.c -I/home/share/work/osd/three-lib/sdl/include/SDL2  -I/home/share/work/osd/three-lib/sdl_ttf/include/SDL2 -L/home/share/work/osd/three-lib/freetype/lib -L/home/share/work/osd/three-lib/sdl/lib -L/home/share/work/osd/three-lib/sdl_ttf/lib -lfreetype -lSDL2 -lSDL2_ttf -lpthread -lm

效果:

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Linux平台上使用SDL字体,需要安装相应的开发包。一般来说,可以使用以下命令安装: ``` sudo apt-get install libsdl2-dev libsdl2-ttf-dev libfreetype6-dev ``` 接下来,可以使用SDL_ttf库来加载和渲染TrueType字体。以下是一个简单的示例程序: ``` c #include <SDL2/SDL.h> #include <SDL2/SDL_ttf.h> #include <stdio.h> int main(int argc, char* argv[]) { SDL_Window* window = NULL; SDL_Renderer* renderer = NULL; TTF_Font* font = NULL; SDL_Surface* surface = NULL; SDL_Texture* texture = NULL; SDL_Rect rect; SDL_Init(SDL_INIT_VIDEO); TTF_Init(); window = SDL_CreateWindow("SDL Font Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); font = TTF_OpenFont("arial.ttf", 24); if (!font) { printf("TTF_OpenFont error: %s\n", TTF_GetError()); return 1; } surface = TTF_RenderText_Solid(font, "Hello, world!", (SDL_Color){255, 255, 255, 255}); if (!surface) { printf("TTF_RenderText_Solid error: %s\n", TTF_GetError()); return 1; } texture = SDL_CreateTextureFromSurface(renderer, surface); rect.x = 0; rect.y = 0; rect.w = surface->w; rect.h = surface->h; SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); SDL_RenderCopy(renderer, texture, NULL, &rect); SDL_RenderPresent(renderer); SDL_Delay(3000); SDL_DestroyTexture(texture); SDL_FreeSurface(surface); TTF_CloseFont(font); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); TTF_Quit(); SDL_Quit(); return 0; } ``` 在这个示例程序中,我们使用TTF_OpenFont函数加载Arial字体,并使用TTF_RenderText_Solid函数渲染“Hello, world!”文本。SDL_Color结构体用于指定字体颜色。最后,我们将渲染好的字体纹理复制到渲染器上,并调用SDL_RenderPresent函数显示结果。 在海思平台中,使用SDLSDL_ttf库需要进行交叉编译。具体步骤可以参考海思提供的开发文档。在渲染字体时,可以使用SDL_SetTextureColorMod函数设置纹理的颜色模式,例如: ``` c SDL_SetTextureColorMod(texture, 255, 0, 0); // 将纹理颜色设置为红色 ``` 这样可以实现字体颜色的设定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值