gpt4 book ai didi

c - stb_truetype.h 处理unicode

转载 作者:行者123 更新时间:2023-12-01 19:23:44 41 4
gpt4 key购买 nike

我正在尝试使用stb_truetype.h渲染中文字符。然而汉字却被错误地渲染了。我尝试毫无问题地渲染像“a”这样的英文字符。谁能提供一些关于如何在 ubuntu 13.04/gcc4.8.1 上处理 unicode 的见解?

这是我的代码:

#include <stdio.h>
#include <math.h>
#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation
#include "stb_truetype.h"

char ttf_buffer[1<<25];

int main(int argc, char **argv)
{
stbtt_fontinfo font;
unsigned char *bitmap;
int w,h,i,j,c = (argc > 1 ? atoi(argv[1]) : 0x4e00)/*choose character here*/, s = (argc > 2 ? atoi(argv[2]) : 20/*set font size*/);

fread(ttf_buffer, 1, 1<<25, fopen(argc > 3 ? argv[3] : "mingliu.ttc", "rb"));
//c:/windows/fonts/arialbd.ttf
//also tried Dejavu font on ubuntu for the chinese character
stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0));

bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, 0,0);

for (j=0; j < h; ++j) {
for (i=0; i < w; ++i)
putchar(" 1234567"[bitmap[j*w+i]>>5]);
putchar('\n');
}

return 0;
}

使用“a”输出

  2342   
52 61
7 32
1 43
2553
53 33
62 33
26 43
271 165
7763174
2 1

使用‘一’输出

466666666666666664
653333333333333356
63 36
63 36
63 36
63 36
63 36
63 36
63 36
63 36
63 36
63 36
63 36
63 36
63 36
63 36
664444444444444466
466666666666666664

应该是这样的: character 'one'来自 http://www.fileformat.info/info/unicode/char/4e00/index.htm

最佳答案

如果您为符号提供了正确的 unicode 键 - 问题很可能是您的字体不支持指定的字符。字体文件可能彼此不同,并且实际符号可能会丢失。我使用以下代码来检查该字符是否确实受支持并且未被某些默认框架符号替换:

// 11111 - code of some definitely unsupported char in my case
int replacer = stbtt_FindGlyphIndex(&font->font, 11111);
int g = stbtt_FindGlyphIndex(&font->font, codepoint);
if (g == replacer)
return NULL;

因此,您可以将字形索引与某些绝对不受支持的符号的字形索引(您可以选择自己的符号)进行比较,并检查符号是否确实存在于字体文件中。

关于c - stb_truetype.h 处理unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20874988/

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