我想获得汉字点阵,通过查一些资料,了解方法,但是在动手过程,有些怎么也想不明白?
CClientDC DC(this);
/*******************************************/
//省去了其它没有必要弄出来的代码
if(!(fdlg.DoModal()==IDOK))
{
MessageBox("未设置字体");
return;
}
fdlg.GetCurrentFont(&lfont); //我选择是宋体,12号 查到资料说16*16点阵
font.CreateFontIndirect(&lfont);
oldfont=DC.SelectObject(&font);
/*******************************************/
UCHAR FtBuf[3] = "一";//我用汉字"一,二"
UINT ch;
ch = ((FtBuf[0]<<8)|(FtBuf[1]&0xff)); cbBuffer=DC.GetGlyphOutline(ch,GGO_BITMAP,&glyph,0,NULL,&m2);//返回大小
if( cbBuffer == -1)
{
MessageBox("Error","Error",MB_OKCANCEL);
return ;
}
else
{
cbuf = new BYTE[cbBuffer];
cbBuffer = DC.GetGlyphOutline(ch,GGO_BITMAP,&glyph,cbBuffer,cbuf,&m2);
}
我这里出现疑问就是:
当用汉字"一","二",cbBuffer返回值不一样,对应是8和48,所以我就迷糊了,怎么得到点阵数据大小有区别,我同样的选择宋体12号啊?如果选择字体大小不一样,对应点阵关系是怎么样的?
比如说:12号是16*16点阵,那14号字体,20号字体,这里有一个对应关系吗?
另外还问一个问题就是:在返回的数据中,cbuf(点阵数据),是怎么样的结构?我找了好久也没有找到这个方面的资料,哪位大虾能提供这个方面资料,感谢谢不尽!我会重新开一个贴,重新给分!
CClientDC DC(this);
/*******************************************/
//省去了其它没有必要弄出来的代码
if(!(fdlg.DoModal()==IDOK))
{
MessageBox("未设置字体");
return;
}
fdlg.GetCurrentFont(&lfont); //我选择是宋体,12号 查到资料说16*16点阵
font.CreateFontIndirect(&lfont);
oldfont=DC.SelectObject(&font);
/*******************************************/
UCHAR FtBuf[3] = "一";//我用汉字"一,二"
UINT ch;
ch = ((FtBuf[0]<<8)|(FtBuf[1]&0xff)); cbBuffer=DC.GetGlyphOutline(ch,GGO_BITMAP,&glyph,0,NULL,&m2);//返回大小
if( cbBuffer == -1)
{
MessageBox("Error","Error",MB_OKCANCEL);
return ;
}
else
{
cbuf = new BYTE[cbBuffer];
cbBuffer = DC.GetGlyphOutline(ch,GGO_BITMAP,&glyph,cbBuffer,cbuf,&m2);
}
我这里出现疑问就是:
当用汉字"一","二",cbBuffer返回值不一样,对应是8和48,所以我就迷糊了,怎么得到点阵数据大小有区别,我同样的选择宋体12号啊?如果选择字体大小不一样,对应点阵关系是怎么样的?
比如说:12号是16*16点阵,那14号字体,20号字体,这里有一个对应关系吗?
另外还问一个问题就是:在返回的数据中,cbuf(点阵数据),是怎么样的结构?我找了好久也没有找到这个方面的资料,哪位大虾能提供这个方面资料,感谢谢不尽!我会重新开一个贴,重新给分!
我当时做8位游戏工具的时候,一个RPG游戏需要16*16点阵字库的支持.当时使用的是hzk16字库
UINT gmBlackBoxX;
UINT gmBlackBoxY;
POINT gmptGlyphOrigin;
short gmCellIncX;
short gmCellIncY;
} GLYPHMETRICS;
四字据时候填充数据的时候,
if( (gmBlackCellIncX%32) != 0)
gmBlackBoxX/32+1和gmBlackCellIncX/32+1取小来决定4字节宽度(就是一行宽度)
得到数扰cbBuffer大小由(gmBlackCellIncX/32+1)*4*gmBlackBoxY;
我自己总结出来的,希望对有需要能用上...