在上一日志中说明了通过ps创建字符图片bmp,这里接上面将bmp文件通过vc++程序读入内存,并且去掉bmp文件的头数据,将中间的字符像素数据提取,写入字符数组。目标字符数组的大小以像素为单位,如400x300像素,那么生成的字符数组就为400行x300列的二维数组,可以存储为16bit或8bit。
在vc中建立基于对话框的程序,在对话框中添加picture控件,用于验证时显示bmp图像像素;
通过FileDlg读取字模.bmp文件,如下图的代码所示
打开文件后,通过file.read读取文件全部内容,然后赋值给hDIB结构体,便于解析bmp文件格式(bmp文件格式百度百科),解出图片数据(像素)开始位置,对应下图中的src变量指向的地址。
为了验证提取的src的位置是否正确,可以将src对应数据地址赋值给LPVOID指针,新建一个bmp图像,并通过CreateDIBitmap()函数在创建的picture控件中显示像素内容,如果与字模内容一致则证明src的地址正确。
验证完成src之后,就可以将src中的数据按顺序存储为数组文件。注意:BMP为DIB类型,默认从底向上显示,阵列中的第一个字节表示位图左下角的象素,而最后一个字节表示位图右上角的象素。由于在上一节中存储图片时,已经选择了“翻转行序”,所以这里是顺序存储。
为了便于应用,在写文件时写为了.c文件,定义了gTextImgData数组,便于应用程序使用,按照前面的400x300的大小存储数组,这里存储为8bit数组。