freetype提取汉字点阵时如何控制粗细??

alexjingsi 2011-09-27 12:20:37
我用freetype从一个ttf字库里提取出某个汉字的字形,转换成14x14的点阵后打印输出, 但是显示出来汉字笔划比较粗, 在嵌入式设备上显示为粗体,很不清楚, 如下所示:
**
***
**
************
************
**
**
**********
**********
**
**
************
************

这是'主'字的点阵显示, 我想问的是, 怎么才能在提取位图时把笔划调细一点, 比如 一横只用一行来显示,而不是两行.

还有一个问题, 我设置的是 14x14的char_size, 但是输出的字符并不都是14x14的, 许多会略小一点, 有没有什么办法把所有的都输出为固定的点阵? 就是像上面的那样,可以直接识别, 并且大小一定要固定.

有哪位知道怎么做的, 麻烦告诉我一下, 邮箱是alexjingsi@gmail.com, 非常感谢!
...全文
676 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
herman~~ 2011-09-27
  • 打赏
  • 举报
回复
MARK
0153 2011-09-27
  • 打赏
  • 举报
回复
以前摘录用过,14x14点阵,差不多是宋体11号
5t4rk 2011-09-27
  • 打赏
  • 举报
回复
这个不太懂

学习来的 顶
alexjingsi 2011-09-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhao4zhong1 的回复:]
C源代码:12x12汉字点阵库(支持GBK)及其处理
http://download.csdn.net/detail/zhao4zhong1/2180241
[/Quote]

这个...我需要的是unicode的点阵啊 而且需要打印到终端上去.. 有没有好一点的方法呢 从ttf里面提取出来的bitmap感觉都太粗了
赵4老师 2011-09-27
  • 打赏
  • 举报
回复
C源代码:12x12汉字点阵库(支持GBK)及其处理
http://download.csdn.net/detail/zhao4zhong1/2180241
alexjingsi 2011-09-27
  • 打赏
  • 举报
回复
呃...freetype里怎么设置不平滑呢? 我没有改动太多 代码如下


FT_Library pFTLib = NULL;
FT_Face pFTFace = NULL;
FT_Error error = 0;
// Init FreeType Lib to manage memory
error = FT_Init_FreeType(&pFTLib);
if (error) {
pFTLib = 0;
printf(" There is some error when Init Library ");
return -1;
}

// create font face from font file

error = FT_New_Face(pFTLib, "/home/alex/download/方正细等线.ttf", 0,
&pFTFace);

charCodeStart = 0x4e38;
charCodeEnd = 0x4e4b;


if (!error) {
FT_Set_Pixel_Sizes(pFTFace, 14, 14);
FT_Glyph glyph;

for (charCode = charCodeStart; charCode <= charCodeEnd; charCode++){
// load glyph for the character
FT_Load_Glyph(pFTFace, FT_Get_Char_Index(pFTFace, charCode), FT_LOAD_DEFAULT);
error = FT_Get_Glyph(pFTFace -> glyph, &glyph);
if (!error) {
// convert glyph to bitmap with 256 gray
FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 1);
FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph) glyph;
FT_Bitmap *bitmap = &bitmap_glyph -> bitmap;

for (i = 0; i < bitmap->rows; ++i) {
for (j = left; j < bitmap->width + left; ++j) {
printf("%c", bitmap->buffer[i * bitmap->width + j] ? '*'
: ' ');
}
}

// free glyph
FT_Done_Glyph(glyph);
glyph = NULL;
}
}

// free face
FT_Done_Face(pFTFace);
pFTFace = NULL;
} else {
printf("Loading the ttf file failed!\n");
printf("error code is %d\n", error);
return 0;
}

// free FreeType Lib
FT_Done_FreeType(pFTLib);
pFTLib = NULL;



不知道应该在哪里设置不要使用平滑呢?
我用fontforge打开ttf文件,并且生成了14x14的位图嵌入进去, 保存后再打开它获取位图, 然后输出到终端.问题是生成位图的时候我看到每一笔划基本都是一行表示, 但打印出来却变成了两行,就是变粗了. 另外我想问下freetype能不能直接提取出内嵌在ttf里的bitmap, 而不是从outline里转换出bitmap呢? 我觉得是转换的时候出了问题,如果能直接提取我自己嵌入的bitmap, 应该就没问题了..谢谢~
星羽 2011-09-27
  • 打赏
  • 举报
回复
你提取字形的时候,开了平滑没,把平滑关了
alexjingsi 2011-09-27
  • 打赏
  • 举报
回复
你好 我是想把点阵字在终端里打印出来 就像上面的'主'字一样 但是显示的时候发现笔划比较粗 在14x14的点阵里显示不清楚 有没有什么办法可以做到打印出细一点的点阵字呢?
辰岡墨竹 2011-09-27
  • 打赏
  • 举报
回复
貌似Windows的那个宋体只嵌入了12x12(9)、14x14(10.5)、16x16(12)、24x24(18)
什么的。注意14x14的字体,在宋体里是10.5磅,别弄错成其它的。

文泉驿有现成的点阵字体吧。
http://wenq.org/?BitmapSong
alexjingsi 2011-09-27
  • 打赏
  • 举报
回复
字体无所谓 能显示汉字就行 当然最好是宋体的 是用于数字电视的显示 关键是要在14x14的点阵里显示很清楚 也就是说笔划不要太粗 哪位有现成的.ttf或.ttc字库 或者现成的点阵 请帮忙发我一份吧 alexjingsi@gmai.com 急用~
星羽 2011-09-27
  • 打赏
  • 举报
回复
你用的是什么字体,试试宋体的9号之类小点的

24,856

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧