文件名称:汉字点阵生成源码 两种方式生成 适合新手学习
文件大小:484KB
文件格式:ZIP
更新时间:2016-06-24 03:39:39
点阵 字体 字模转换 汉字取模
本例题采用两种方式列举了汉字取模方法,并用图像生动的显示出来,可以说是新手学习的好例题。
1.以16点阵汉字取模方式 通过定位读取 HZK16 文件(源码内附带这个文件,可以不用下载了)方式,详细说明实现方法。
2.通过GetGlyphOutline这个函数实现,用户可以手动选择Windows自带的字体,然后根据字体生成相应的数组,最后绘制数组显示。
以上源码楼主测试,在VC6.0下完全通过,可直接运行。
以上代码仍有很多不足之处,请大家留言指正哈.
关键代码:
BOOL CPixFontTranDlg::GetGridFromHZK16(CString strFont,BYTE buffer[])
{
...
AnsiCode[0]=strFont.GetAt(0);
if(AnsiCode[0]<160) //英文字母和字符,转换为全角的字符内码
{
BYTE temp=AnsiCode[0];
AnsiCode[0]=HIBYTE(temp-0x21+0xA3A1); //0xA3A1 是ASCII 码为0X21的字符对应的全角字符的内码,这是一个偏移量的计算
AnsiCode[1]=LOBYTE(temp-0x21+0xA3A1);
}
else //是汉字,则直接转换
{
AnsiCode[1]=strFont.GetAt(1);
}
qh=AnsiCode[0]-160; //区码和位码
wh=AnsiCode[1]-160;
location=(94*(qh-1)+(wh-1))*32; //HZK16 中的索引 32是一个字的字模字节数
....
}
BOOL CPixFontTranDlg::GetGridFormWinSDK(CString strFont,BYTE buffer[],CString strFontName)
{
CFont newfont;
newfont.CreateFont(16,0,0,0,0,0,0,0,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_CHARACTER_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,strFontName); //根据字体的大小和名称创建一个字体,m_strFontName就是WINDOWS中的字体名称
.....
nLen=::GetGlyphOutline(pdc->GetSafeHdc(),chartemp,GGO_BITMAP,&glpm,0,NULL,&mmat2);
//根据MSDN,cbBuffer 传入参数0,则返回值是BUFFER的大小
if((signed)nLen>0)
{
....
nLentemp=::GetGlyphOutline(pdc->GetSafeHdc(),chartemp,GGO_BITMAP,&glpm,nLen,pBuf,&mmat2);//重新运行,获取BUFFER的数据,pBUF就是字符对应位图的BUFFER指针
}
...
offset=8-rows/2; //从点阵第一行到字的第一行的偏移量
for(i=0;i
【文件预览】:
PixFontTran
----MyDrawFont.h(1KB)
----resource.h(965B)
----PixFontTran.aps(35KB)
----Debug()
----PixFontTran.rc(6KB)
----PixFontTran.clw(2KB)
----PixFontTran.opt(55KB)
----PixFontTranDlg.cpp(8KB)
----PixFontTran.ncb(57KB)
----PixFontTran.plg(256B)
----modal()
--------HZK24K(476KB)
--------HZK16(261KB)
----PixFontTran.cpp(2KB)
----ReadMe.txt(4KB)
----PixFontTran.h(1KB)
----res()
--------PixFontTran.ico(1KB)
--------PixFontTran.rc2(403B)
----PixFontTranDlg.h(2KB)
----StdAfx.cpp(213B)
----PixFontTran.dsp(4KB)
----MyDrawFont.cpp(3KB)
----PixFontTran.dsw(528B)
----StdAfx.h(1KB)