文件名称:汉字点阵生成源码 两种方式生成 适合新手学习
文件大小: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