//**************************************************************
//***************汉字点阵的提取及点阵数据的转换*****************
//**************************************************************
//void SingleData(CString m_str)定义汉字字模的提取函数
//此函数使用Visual C++6.0编写
void SingleData(CString m_text)定义待转换的字模函数
{
int ctext=(int)m_text.GetAt(0); //取得文字的ASIIC码
CFont myfont; //创建所想要的字体样式
myfont.CreateFont(-60,0, //调用字体创建函数进行字体样式的创建
0,0,
400,
0,0,0,1,0,0,0,
32,
_T("宋体"));
//接下来使用图片拉伸的方法将文字拉伸成所需要的大小和纵横比
CDC olddc,newdc; //创建两个容器
CBitmap oldbmp,newbmp; //创建两个图片对象
CSize fsize;
unsigned long syscolor=RGB(0,0,0); //图片的背景颜色设置成白色
unsigned long bkcolor=RGB(255,255,255); //图片文字的颜色设置成黑色
olddc.CreateCompatibleDC(NULL);
olddc.SelectObject(&myfont);
fsize=olddc.GetTextExtent(m_text); //获取原有文字的大小
//olddc容器的大小与原有大小一致
oldbmp.CreateCompatibleBitmap(&olddc,fsize.cx,fsize.cy);
olddc.SelectObject(&oldbmp);
//将文字输出到容器里形成图片
olddc.ExtTextOut(0,0,ETO_CLIPPED,CRect(CPoint(0,0),fsize),m_text,NULL);
CSize newsize; //创建存储图片新尺寸的变量
int tempx,tempy;
unsigned long color;
if(ctext>=0&&ctext<=255) //如果文字为字符或者字母
{
newsize.cx=32;
newsize.cy=49;
newdc.CreateCompatibleDC(NULL);
newbmp.CreateCompatibleBitmap(&newdc,newsize.cx,newsize.cy);
newdc.SelectObject(&newbmp);
//将文字拉伸或缩小到所需大小
newdc.StretchBlt(0,0,newsize.cx,newsize.cy,&olddc,0,0,fsize.cx,fsize.cy,SRCCOPY);
//在bmp图片上逐点读取
for(tempy=0;tempy<32;tempy++)
{
for(tempx=0;tempx<25;tempx++)
{
color=newdc.GetPixel(tempx,tempy+11); //获取当前点的颜色
//如果为黑色则当前数据为1,反之为0
b_single[tempy][tempx]=(color==bkcolor)?0:1;
}
}
}
else
{
newsize.cx=35;
newsize.cy=39;
newdc.CreateCompatibleDC(NULL);
newbmp.CreateCompatibleBitmap(&newdc,newsize.cx,newsize.cy);
&nb