📄 zhongzhgetbmp.cpp
字号:
// ZhongzhGetBmp.cpp: implementation of the CZhongzhGetBmp class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FingerDemo.h"
#include "protocol.h"
#include "ZhongzhGetBmp.h"
#include "captipdlg.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define ZHIMAGESIZE 224
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
int com;
unsigned char DataOut[ZHIMAGESIZE][ZHIMAGESIZE],Input[128][128];
bool Cont;
extern CFingerDemoApp theApp;
CZhongzhGetBmp::CZhongzhGetBmp()
{
}
CZhongzhGetBmp::~CZhongzhGetBmp()
{
}
bool CZhongzhGetBmp::InitCapture()
{
SCMD scmd;//测试通讯
CMD cmd;
scmd.sPkgId=EndData;
scmd.sAddress[0]=3;
scmd.sAddress[1]=3;
scmd.sPkgLen=2;
scmd.sPkgCnt[0]=0;
scmd.sPkgCnt[1]=1;
// CFcom pcom;
// if(pcom.DoModal()==IDOK)
// com=pcom.m_com;//输入串口值,缺省值为COM1
// else
// return false;
com = theApp.finger_com;
if(!InitCom( com )) //初始化串口
return false;
if( SendPackage(com,scmd)!=1 )
{
AfxMessageBox( "连接模块失败, 请检查232串口设置, 模块是否上电 !" );
return false;
}
int ret;
unsigned char yanz[8]={0,0,0,0,0,0,0,0};
ret=SensorDeviceKey(com,yanz,yanz);//发送验证口令命令
if( ret==1 )//发送成功
{
while(!GetPackage(com,&cmd));//等待结果包
if((cmd.PkgCnt[0]&0x03)==3)//正确
{
return true;
}
else //错误
{
AfxMessageBox("您的口令错误!" );
return false;
}
}
return false;
}
CCapTipDlg *pTipDlg;
bool CZhongzhGetBmp::GetBmp(Scan_Bmp *bmp)
{
if(!InitCapture())
{
AfxMessageBox("采集仪无法初始化,请检查设备及端口号!");
return false;
}
Cont=true;
// AfxBeginThread( GenImge,NULL);//开始执行线程
pTipDlg=new CCapTipDlg();
pTipDlg->Create(IDD_TIP_DLG1);
if(GenImage()<=0)
{
AfxMessageBox("指纹图像采集不成功!");
return false;
}
ReleaseCom(com);
/////放大图像
int dx=0,dy=0;
int width=ZHIMAGESIZE,height=ZHIMAGESIZE;
dx=bmp->m_Width-width;
dy=bmp->m_Height-height;
BYTE *p,*q;
p=bmp->m_Bmp_pBmpValue ;
q=&DataOut[0][0];
memset(p,255,bmp->m_Width*(dy/2));
p+=bmp->m_Width*(dy/2);
for(int i=0;i<height;i++)
{
memset(p,255,dx/2);
p+=dx/2;
memcpy(p,q,width);
q+=width;
p+=width;
memset(p,255,dx/2);
p+=dx/2;
}
memset(p,255,bmp->m_Width*(dy/2));
pTipDlg->EndDialog(1);
return true;
}
//UINT GenImge(LPVOID pParam)
int GenImage()
{
int ret=1;
CMD cmd;
pTipDlg->ShowWindow(SW_SHOWNORMAL);
(pTipDlg->GetDlgItem(IDC_TIP_TEXT))->SetWindowText("请您在指纹采集仪上按捺指纹....");
ret=SensorGenImg(com);//发送录入图像命令
if( ret==1 )//命令发送成功
{
while( (!GetPackage(com,&cmd)) && (Cont) )
;//等待接收非立即执行命令执行完后返回的数据包
(pTipDlg->GetDlgItem(IDC_TIP_TEXT))->SetWindowText("正在上传指纹,请您等待.....");
pTipDlg->ShowWindow(SW_SHOWNORMAL );
if(!Cont)
{
return 0;
}
if((cmd.PkgCnt[0]&0x03)==3)//判断是否成功
{
OnUpImg();//上传图像
SensorFree(com);
return 1;
}
else
return -1;//失败信息
}
if( ret==2 )//模块忙
return 0;
return 0;
}
void OnUpImg()
{
int ret=SensorUpImg(com,Input);//发送上传图像命令
if( ret==1 )//成功
{
for(int i=0;i<=ZHIMAGESIZE-1;i++ )
for(int j=0;j<=ZHIMAGESIZE-1;j++ )
{
int p,q;
p=i/1.75,q=j/1.75;
DataOut[ZHIMAGESIZE-1-i][ZHIMAGESIZE-1-j]=Input[p][q];
DataOut[ZHIMAGESIZE-1-i][ZHIMAGESIZE-1-j]=255-DataOut[ZHIMAGESIZE-1-i][ZHIMAGESIZE-1-j];
}
}
}
UINT ShowTip(LPVOID pParam)
{
CCapTipDlg *dlg;
dlg=(CCapTipDlg*)pParam;
// dlg->ShowWindow(SW_SHOWMAXIMIZED);
dlg->DoModal();
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -