TTF字库

e_feeling 2012-05-28 11:49:46
如何一个TTF(True Type Font)字库包含了多个字符集或代码页的字符,如何提取其中一个字符集或代码页的字符信息单独形成一个字库?
...全文
459 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
e_feeling 2013-04-29
  • 打赏
  • 举报
回复
有知道的吗?
e_feeling 2012-12-16
  • 打赏
  • 举报
回复
需要的是字库文件,一个包含多个字符集/代码页的字库,按不同的字符集拆分为多个字库文件。
e_feeling 2012-11-18
  • 打赏
  • 举报
回复
需要的是字库文件,一个包含多个字符集/代码页的字库,按不同的字符集拆分为多个字库文件。
schlafenhamster 2012-06-12
  • 打赏
  • 举报
回复
知道了好,要是时间多可以慢慢地从TTF原理开始,然后 parse ttf
e_feeling 2012-06-11
  • 打赏
  • 举报
回复
这个知道,现在讨论的是技术问题?
schlafenhamster 2012-06-09
  • 打赏
  • 举报
回复
“需要的是字库文件,一个包含多个字符集/代码页的字库”
都是有版权的!
e_feeling 2012-06-08
  • 打赏
  • 举报
回复
需要的是字库文件,一个包含多个字符集/代码页的字库,按不同的字符集拆分为多个字库文件。
schlafenhamster 2012-06-06
  • 打赏
  • 举报
回复
好像有个‘fitz’
e_feeling 2012-06-05
  • 打赏
  • 举报
回复
freetype是使用TTF生成字符的。
schlafenhamster 2012-06-04
  • 打赏
  • 举报
回复
搜索‘freetype’和关于pdf的。
schlafenhamster 2012-06-04
  • 打赏
  • 举报
回复
要是时间多可以慢慢地“编程实现”,不容易的。
e_feeling 2012-06-03
  • 打赏
  • 举报
回复
这是设置字体的大小后提取具体字符的字形轮廓。
需要的是字库文件,一个包含多个字符集/代码页的字库,按不同的字符集拆分为多个字库文件。
schlafenhamster 2012-06-02
  • 打赏
  • 举报
回复
给一段代码:


void CTtfShowDlg::DrawContour(CDC *pDC,int X, int Y,char* theChar)
{
GLYPHMETRICS gm;
MAT2 mat;
/*
MAT2 mat= {{ 0, 1, },
{ 0, 0, },
{ 0, 0, },
{ 0, 1, }};
*/
mat.eM11=Double2Fixed(1);
mat.eM12=Double2Fixed(0);
mat.eM21=Double2Fixed(0);
#ifdef UPSIDE_DOWN
mat.eM22=Double2Fixed(1);
#else // normal
mat.eM22=Double2Fixed(-1);
#endif
POINT Origin={X,Y};
WCHAR szText[40];
// Copy the string
MultiByteToWideChar(CP_ACP, 0, theChar, -1, (LPWSTR) szText, 40);
// actually only 1 char.
for(UINT i=0;szText[i];i++)
{/* Returns the curve data points in the rasterizer’s native format, using device units. */
DWORD BufferLen=::GetGlyphOutlineW(pDC->m_hDC,szText[i],GGO_NATIVE,&gm,0,0,&mat);
if(BufferLen != GDI_ERROR) // 0xFFFFFFFFL
{//OK
BYTE *pBuffer=new BYTE[BufferLen];
DWORD Result=::GetGlyphOutlineW(pDC->m_hDC,szText[i],GGO_NATIVE,&gm,BufferLen,pBuffer,&mat);
// OutLine
DrawCurve(pDC,pBuffer,BufferLen,gm,Origin);
// if save
if(m_bSaveToFile)
{
m_bSaveToFile=FALSE;
// + size theApp.m_Ascent
char Ascent[10];
sprintf(Ascent,"%d",theApp.m_Ascent);
strcat(theChar,Ascent);
SaveGlyphInfo(theChar,pBuffer,BufferLen);
}
Origin.x += gm.gmCellIncX;
Origin.y += gm.gmCellIncY;
delete[] pBuffer;
}
}
}

关键是:
::GetGlyphOutlineW()函数,而这个函数返回的轮廓还和当前字体有关。
e_feeling 2012-06-01
  • 打赏
  • 举报
回复
比如一个字库包含了拉丁文、阿拉伯文、法文等代码页的字符,需要把字库中拉丁文的字符信息提取出来生成一个拉丁文字库。
schlafenhamster 2012-06-01
  • 打赏
  • 举报
回复
TTF一般是2次曲线做的字符,提取的是轮廓,通常不包含点阵字符
e_feeling 2012-05-31
  • 打赏
  • 举报
回复
不是生成字符,是提取指定字符集的字库
schlafenhamster 2012-05-31
  • 打赏
  • 举报
回复
要是时间多可以慢慢地“编程实现”,不容易的。
e_feeling 2012-05-30
  • 打赏
  • 举报
回复
需要编程实现
e_feeling 2012-05-30
  • 打赏
  • 举报
回复
需要编程实现
e_feeling 2012-05-30
  • 打赏
  • 举报
回复
要编程实现
加载更多回复(1)

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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