我正在尝试使用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
应该长这样:
来自http://www.fileformat.info/info/unicode/char/4e00/index.htm
gcc sample.c -lm
,但我回家后会检查一下。 @HansPassant 据我所知,我应该使用正确的码点,即中文字符“一”。我怀疑 gcc 使用的不是 UTF-8? - metro