gpt4 book ai didi

c++ - 如何使用UTF8将代码点与freetype结合使用?

转载 作者:行者123 更新时间:2023-12-02 10:10:11 24 4
gpt4 key购买 nike

今天,我了解了由多个UTF8代码点组成的“字符”。我一直认为UTF8中的一个代码点映射到一个特定字符,但似乎我错了。
例如,以下单个字形“é”由3个字节组成,构成2个代码点。
我无法使用SDL_ttf正确呈现此符号。似乎使用了FT_Get_Char_Index 中的freetype library函数来查找字形。它通过传递代码点来实现,并且库将其视为一个以上字形来对待。我将如何使用freetype库正确渲染此字形?

  TTF_Font *ttf = TTF_OpenFont("C:\\UbuntuMono-Regular.ttf", 24);
SDL_Color color = {0, 255, 255, 255};
SDL_Surface *surface = TTF_RenderUTF8_Blended(ttf, "é", color); // u8"é" doesn't work neither
外观如下:
enter image description here

最佳答案

我无法重现您的问题。字体有问题吗?
这是我做的一个最小示例(只需将fontFile更改为字体的路径):

#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>

int main()
{
const SDL_Color white = { 0xFF, 0xFF, 0xFF, 0 };

SDL_Window* window;
SDL_Renderer* renderer;
SDL_CreateWindowAndRenderer(200, 200, 0, &window, &renderer);

TTF_Init();
const char* fontFile = "/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf";
TTF_Font *font = TTF_OpenFont(fontFile, 32);

SDL_Surface* surface = TTF_RenderUTF8_Blended(font, "é", white);
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface);
SDL_Rect rect = {10, 10, surface->w, surface->h};

while(1)
{
SDL_Event event;
SDL_WaitEvent(&event);
if(event.type == SDL_QUIT)
break;

SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
SDL_RenderClear(renderer);

SDL_RenderCopy(renderer, texture, 0, &rect);
SDL_RenderPresent(renderer);
}
}
这是我得到的输出:
enter image description here
我正在使用C。

I always believed that one code point in UTF8 maps to a specificcharacter, but it seems like I was wrong. For example, the followingsingle glyph "é" consists of 3 bytes making up 2 code points.


的确,可以将几个代码点分组以组成一个“字符”(正确的名称是字形)( link)。但我认为 é( link)并非如此。尽管我可能对此有误。

关于c++ - 如何使用UTF8将代码点与freetype结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63908569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com