freetype2的问题

zlc53 2011-06-30 12:13:05
1)如何读取WINDOWS 系统字体,比如使用宋体怎么使用FREETYPE2显示,FREETYPE2的接口都是要直接输入字体文件路径的的。但有的字体,比如宋体,新宋体是在一个文件里的,用FREETYPE2的接口是可以查到这个文件里有3种字体,可是我怎么指定呢?

2)如果使用相同的字体,规定相同的大小。我发现显示出来的效果和WINDOWS不一样,有的字差不多,有的字差很多。比如宋体,显示中文还比较像,显示英文差别太大,FREETYPE2的效果很差。再比如一些字体,设的大小大一点,FREETYPE2的就比WINDOWS的要大很多。

3)粗体,斜体怎么设置。要和WINDOWS 的效果一样才好
...全文
276 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gamemagic 2011-06-30
  • 打赏
  • 举报
回复
使用FTGL2的表示无鸭梨
zlc53 2011-06-30
  • 打赏
  • 举报
回复
我从来都是FT_LOAD_FORCE_AUTOHINT,而微软雅黑字体大了后明显比WINDOWS相同的要大。还有宋体一直显示的比较正常,不过使用宋体的英文,FT_LOAD_FORCE_AUTOHINT样子不好看,不如WINDOWS,字体颜色淡,模湖,不清楚
xychzh 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zlc53 的回复:]
效果还是不对,我本来设置的就是FT_LOAD_FORCE_AUTOHINT,中文显示还行,英文模湖
[/Quote]

不管是英文还是中文,就宋体而言,只要像素尺寸高于18,就得用FT_LOAD_FORCE_AUTOHINT来抗锯齿,否则必须用FT_LOAD_MONOCHROME,而像隶书,则好像尺寸到了14,就得用抗锯齿
zlc53 2011-06-30
  • 打赏
  • 举报
回复
效果还是不对,我本来设置的就是FT_LOAD_FORCE_AUTOHINT,中文显示还行,英文模湖
xychzh 2011-06-30
  • 打赏
  • 举报
回复
2:是你的渲染方式不正确,还有一个问题就是是否像素拷贝正确?因为有些尺寸的像素是1位存储的。另外尺寸大的话,还要设置抗锯齿。比如宋体超过18像素大小,就要设置锯齿(FT_LOAD_MONOCHROME无抗锯齿,FT_LOAD_FORCE_AUTOHINT抗锯齿)

给你我的部分代码参考:

// FT_LOAD_MONOCHROME 无抗锯齿
// FT_LOAD_FORCE_AUTOHINT 抗锯齿
FT_Int32 loadFlags = (m_bAliasing? FT_LOAD_FORCE_AUTOHINT : FT_LOAD_MONOCHROME);

// 加载字形
FT_Load_Char(m_pFace, charCode, loadFlags);

// 粗体
if(m_bBold)
{
int strength = 1 << 6;
FT_Outline_Embolden(&m_pFace->glyph->outline, strength);
}

// 斜体
if(m_bItalic)
{
// FT_Matrix m_ItalicMatrix;
// m_ItalicMatrix.xx = 1 << 16;
// m_ItalicMatrix.xy = 0x5800;
// m_ItalicMatrix.yx = 0;
// m_ItalicMatrix.yy = 1 << 16;
FT_Outline_Transform(&m_pFace->glyph->outline, &m_ItalicMatrix);
}

// 渲染字形
FT_Render_Mode renderMode = (m_bAliasing? FT_RENDER_MODE_NORMAL : FT_RENDER_MODE_MONO);

if (FT_Render_Glyph(m_pFace->glyph, renderMode))
{
return false;
}


3:粗体和斜体已经在上面的代码中了。

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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