当前位置:编程学习 > C/C++ >>

设计中的手写识别(输入法)笔画--中篇

之所以有此篇是因为上篇中的算法在不同人测试时得到不同的识别率,一个人的书法适应之后对另一个人的书法进行识别又降低
当学习大量的写法之后,发现对单一写法的识别率反而总体降低了,因此需要借笔画识别来进行辅助,以大幅提高识别率
当然,路不可能走QQ拼音的路
 
具体的算法就不写出来了,标题也没说我要公布算法,这里只提供DLL的输出函数说明,相关的动态库和DEMO源码在我的下载那里可以下载到
不需要积分,需要说明的是,此模块作为技术研究使用,不支持商业用途,本人不保证此模块何时会失效与否
 
1.CreateStroke
用途:创建一个笔画集合
API原型
[cpp]  
W32API HSTROKE __stdcall CreateStroke(DWORD dwCount);  
VB声明
[vb]  
[Private] Declare Function CreateStroke Lib "OL32.DLL" (ByVal dwCount As Long) As Long  
参数:dwCount当前版本必须是31,代表总共的笔画数
返回值:非零表示成功
 
2.OpenStroke
用途:打开保存的笔画集合文件来初始化笔画集合
API原型
[cpp] 
W32API BOOL __stdcall OpenStroke(HSTROKE hStroke, LPCSTR lpFileName);  
VB声明
[vb]  
[Private] Declare Function OpenStroke Lib "OL32.DLL" (ByVal hStroke As Long, ByVal lpFileName As String) As Long  
参数:hStroke有效的HSTROKE句柄; lpFileName文件路径
返回值:正值表示成功
 
3.GetStrokes
用途:从一个字符获取笔画列表
API原型
[cpp 
W32API int __stdcall GetStrokes(HSTROKE hStroke, LPCSTR strText, LPCSTR strFont, LONG dwSize);  
VB声明
[vb]  
[Private] Declare Function GetStrokes Lib "OL32.DLL" (ByVal hStroke As Long, ByVal strText As String, ByVal strFont As String, ByVal dwSize As Long) As Long  
参数:hStroke同上,strText为要分析的字符(GB2312编码,GBK未测试),strFont所用的字体名称,dwSize字体的字号,推荐72号
返回值:正值代表字体存储的笔画数量
 
4.GetStrikes
用途:从GetStrokes得到的笔画列表获取一个笔画
API原型
[cpp] 
W32API BOOL __stdcall GetStrikes(HSTROKE hStroke, DWORD dwIndex, PSTROKE pBuffer);  
VB声明
[vb]  
[Private] Declare Function GetStrikes Lib "OL32.DLL" (ByVal hStroke As Long, ByVal dwIndex As Long, pBuffer As STROKE) As Long  
参数: hStroke同上,dwIndex为笔画索引,pBuffer为STROKE数据类型
返回值:正值表示成功
 
5.DrawStrike
用途:绘制一个笔画
API原型
[cpp] v 
W32API BOOL __stdcall DrawStrike(HSTROKE hStroke, HDC hDC, PSTROKE pBuffer, LPRECT lpRect, DWORD dwFlags);  
VB声明
[Private] Declare Function DrawStrike Lib "OL32.DLL" (ByVal hStroke As Long, ByVal hDC As Long, pBuffer As STROKE, lpRect As T_RECT, ByVal dwFlags As Long) As Long
参数:hStroke同上,hDC为设备场景,pBuffer为STROKE类型要绘制的笔画对象,lpRect为矩形区域,dwFlags为绘制标识
[vb] 
'#define DS_FLAG_CALCRC      0x00000000  // 计算边界  
Private Const DS_FLAG_CALCRC = &H0&  
'#define DS_FLAG_BORDER      0x00000001  // 绘制边界  
Private Const DS_FLAG_BORDER = &H1&  
'#define DS_FLAG_FLUSH       0x00000002  // 填充曲线  
Private Const DS_FLAG_FLUSH = &H2&  
'#define DS_FLAG_STRING      0x00000004  // 绘制字符(暂不支持, 自行处理)  
返回值:正值表示成功
 
6.SetStroke
用途:更新一个笔画集合的某个笔画
API原型
[cpp] 
W32API BOOL __stdcall SetStroke(HSTROKE hStroke, DWORD dwIndex, PSTROKE pBuffer);  
VB声明
[Private] Declare Function SetStroke Lib "OL32.DLL" (ByVal hStroke As Long, ByVal dwIndex As Long, pBuffer As STROKE) As Long
参数:hStroke同上,dwIndex为要更新的笔画索引,pBuffer为新的笔画对象
返回值:正值表示成功
 
7.SaveStroke
用途:保存一个笔画集合到文件
API原型
[cpp]  
W32API BOOL __stdcall SaveStroke(HSTROKE hStroke, LPCSTR lpFileName);  
VB声明
[vb]  
[Private] Declare Function SaveStroke Lib "OL32.DLL" (ByVal hStroke As Long, ByVal lpFileName As String) As Long  
参数:hStroke同上;lpFileName为文件路径
返回值:正值代表成功
 
8.DeleteStroke
用途:删除一个笔画集合
API原型
[cpp]  
W32API BOOL __stdcall DeleteStroke(HSTROKE hStroke);  
VB声明
[Private] Declare Function DeleteStroke Lib "OL32.DLL" (ByVal hStroke As Long) As Long
参数:hStroke同上
返回值:总是1代表成功
 
注:在DLL中有自动释放机制的代码,在进程释放DLL时会自动删除没有删除的笔画集合.
演示截图:
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,