用freetype2显示ascii-art中文

 
getbitmap.c
#include <ft2build.h>
#include FT_FREETYPE_H

int main(int argc, char **argv){
int psize;
FT_Library library;
FT_Face face;
unsigned int ucode;
FT_UInt glyph_index;
int row, pixel;

if(argc != 4){
return 10;
}

ucode = strtol(argv[2], NULL, 16);
psize = strtol(argv[3], NULL, 10);

printf("unicode +%X size %d/n", ucode, psize);
if(FT_Init_FreeType(&library)
|| FT_New_Face(library,
argv[1],
0,
&face)
|| FT_Set_Pixel_Sizes(face,
psize,
0)){
return 1;
}

glyph_index = FT_Get_Char_Index(face, ucode);
if(glyph_index == 0){
return 2;
}
if(FT_Load_Glyph(face,
glyph_index,
FT_LOAD_DEFAULT)){
return 3;
}
if(FT_Render_Glyph(face->glyph,
FT_RENDER_MODE_MONO)){
return 4;
}
printf("bitmap_left=%d/n"
"bitmap_top=%d/n"
"bitmap.rows=%d/n"
"bitmap.width=%d/n"
"bitmap.pitch=%d/n"
"bitmap.pixel_mode=%d/n",
face->glyph->bitmap_left,
face->glyph->bitmap_top,
face->glyph->bitmap.rows,
face->glyph->bitmap.width,
face->glyph->bitmap.pitch,
face->glyph->bitmap.pixel_mode);
printf("/n/n");
for(row = 0;
row < (face->glyph->bitmap.rows - face->glyph->bitmap_top);
++row){
for(pixel = 0; pixel < face->glyph->bitmap.width; ++pixel){
printf("_");
}
printf("/n");
}
for(row = 0; row < face->glyph->bitmap.rows; ++row){
for(pixel = 0; pixel < face->glyph->bitmap_left; ++pixel)
printf("_");
for(pixel = 0; pixel < face->glyph->bitmap.width; ++pixel){
printf("%c", (face->glyph->bitmap.buffer
[row * face->glyph->bitmap.pitch +
pixel/8] & (0xC0 >> (pixel % 8)))?'O':'_');
}
printf("/n");
}
return 0;
}

Makefile
all : getbitmap

getbitmap.o : getbitmap.c
gcc $(CXXFLAGS) -c `pkg-config freetype2 --cflags` $< -o $@

getbitmap : getbitmap.o
gcc $(CXXFLAGS) `pkg-config freetype2 --libs` -lm $< -o $@

clean :
rm -f *.o getbitmap


运行效果:
hellwolf@cocteau#pts/1%J0S2:getbitmap$ ./getbitmap /usr/share/fonts/chinese/True
Type/uming.ttf $(mygetunicode 永) 12
unicode +6C38 size 12
bitmap_left=0
bitmap_top=10
bitmap.rows=11
bitmap.width=11
bitmap.pitch=2
bitmap.pixel_mode=1


___________
____OOO____
______OO___
__OOOOO____
_____OO_OO_
OOOOOOO_O__
___OOOOO___
___OOOOO___
__OO_OO_O__
_OOOOOO_OO_
OO__OOO_OOO
O___OO___OO
hellwolf@cocteau#pts/1%J0S2:getbitmap$ ./getbitmap /usr/share/fonts/chinese/True
Type/uming.ttf $(mygetunicode 永) 16
unicode +6C38 size 16
bitmap_left=1
bitmap_top=14
bitmap.rows=15
bitmap.width=14
bitmap.pitch=2
bitmap.pixel_mode=1


______________
_____OO________
______OOO______
_______OO______
_______________
__OOOOOOO__OOO_
_______OO__OO__
____OO_OO_OO___
_OOOOOOOOOO____
____OO_OOO_____
___OO__OOOO____
___OO__OOOO____
__OO___OO_OO___
_OO_OO_OO__OOO_
_O___OOOO___OOO
______OO_____OO
hellwolf@cocteau#pts/1%J0S2:getbitmap$ ./getbitmap /usr/share/fonts/chinese/True
Type/uming.ttf $(mygetunicode 永) 20
unicode +6C38 size 20
bitmap_left=0
bitmap_top=18
bitmap.rows=20
bitmap.width=20
bitmap.pitch=4
bitmap.pixel_mode=1


____________________
____________________
____________________
________OOO_________
_________OOO________
____________________
_________OO_________
____OOOOOOOO____O___
_________OO___OOOO__
_________OOO__OO____
OOOOOOOO_OOO_OO_____
_____OOO_OOOOO______
_____OO__OOOO_______
_____OO__OOOO_______
____OOO__OO_OO______
____OO___OO__OO_____
___OO____OO__OOO____
___OO____OO___OOO___
__OO_____OO_____OOOO
_OO______OO_________
OO______OOO_________
____________________
hellwolf@cocteau#pts/1%J0S2:getbitmap$ ./getbitmap /usr/share/fonts/chinese/True
Type/uming.ttf $(mygetunicode 中) 16
unicode +4E2D size 16
bitmap_left=1
bitmap_top=14
bitmap.rows=15
bitmap.width=14
bitmap.pitch=2
bitmap.pixel_mode=1


______________
______OOO______
______OO_______
______OO_______
______OO____OO_
_OOOOOOOOOOOOOO
_O____OO____OO_
_O____OO____OO_
_O____OO____OO_
_OOOOOOOOOOOOO_
_O____OO____OO_
______OO_______
______OO_______
______OO_______
______OO_______
______OO_______
hellwolf@cocteau#pts/1%J0S2:getbitmap$ ./getbitmap /usr/share/fonts/chinese/True
Type/uming.ttf $(mygetunicode 中) 32
unicode +4E2D size 32
bitmap_left=4
bitmap_top=28
bitmap.rows=32
bitmap.width=26
bitmap.pitch=4
bitmap.pixel_mode=1


__________________________
__________________________
__________________________
__________________________
______________OO______________
______________OOOO____________
______________OOO_____________
______________OOO_____________
______________OOO_____________
______________OOO_____________
____O_________OOO________OOO__
____OOOOOOOOOOOOOOOOOOOOOOOOO_
____OO________OOO________OOO__
____OO________OOO________OOO__
____OO________OOO________OOO__
____OO________OOO________OOO__
____OO________OOO________OOO__
____OO________OOO________OOO__
____OO________OOO________OOO__
____OO________OOO________OOO__
____OO________OOO________OOO__
____OOOOOOOOOOOOOOOOOOOOOOOO__
____OO________OOO________OOO__
____OO________OOO________OOO__
____O_________OOO________OO___
______________OOO_____________
______________OOO_____________
______________OOO_____________
______________OOO_____________
______________OOO_____________
______________OOO_____________
______________OOO_____________
______________OOO_____________
______________OOO_____________
______________OO______________
______________________________
hellwolf@cocteau#pts/1%J0S2:getbitmap$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值