📄 showprocedure.cpp
字号:
}
if (m_TextImgList.GetCount()<1) {
InvalidateRect(NULL);
return FALSE;
}
m_strResult = RecChar(m_TextImgList);
POSITION pos = m_TextImgList.GetHeadPosition();
int nCount = m_TextImgList.GetCount();
m_ImgTextPic.Create(CSize(34*nCount,64),FALSE);
int nTop = 0;
COleDateTime time = COleDateTime::GetCurrentTime();
while (pos)
{
CImage imgTemp = m_TextImgList.GetNext(pos);
imgTemp.Stretch(CSize(32,64));
if (m_bExample)
{
strPath.Format("%sExaple\\%s%d.bmp",
GetAppPath(),TimeToString(COleDateTime::GetCurrentTime()),rand());
imgTemp.SaveBMP(strPath);
}
for(int i=0;i<64;i++)
{
for(int j=0;j<32;j++)
{
m_ImgTextPic.m_pR[m_ImgTextPic.GetWidth()*i+j+nTop*34] =
imgTemp.m_pR[imgTemp.GetWidth()*i+j];
}
}
nTop++;
}
InvalidateRect(NULL);
UpdateData(FALSE);
return TRUE;
}
void CShowProcedure::OnPaint()
{
CPaintDC dc(this); // device context for painting
CWnd * pWnd;
CDC * pDC;
CRect rcWin;
//原始图象
pWnd = GetDlgItem(IDC_ORG_IMAGE);
pWnd->GetWindowRect(rcWin);
rcWin.OffsetRect(-rcWin.TopLeft());
pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pDC->Rectangle(rcWin);
m_ImgOrg.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
pWnd->ReleaseDC(pDC);
//剪切后灰度的图象
pWnd = GetDlgItem(IDC_AFTER_CUT);
pWnd->GetWindowRect(rcWin);
rcWin.OffsetRect(-rcWin.TopLeft());
pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pDC->Rectangle(rcWin);
m_ImgGray.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
pWnd->ReleaseDC(pDC);
//二值化
pWnd = GetDlgItem(IDC_THRETHOLD);
pWnd->GetWindowRect(rcWin);
rcWin.OffsetRect(-rcWin.TopLeft());
pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pDC->Rectangle(rcWin);
m_ImgTwo.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
pWnd->ReleaseDC(pDC);
//定位图象
pWnd = GetDlgItem(IDC_LOCATION);
pWnd->GetWindowRect(rcWin);
rcWin.OffsetRect(-rcWin.TopLeft());
pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pDC->Rectangle(rcWin);
m_ImgLocation.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
pWnd->ReleaseDC(pDC);
//车牌
pWnd = GetDlgItem(IDC_CHE_PAI);
pWnd->GetWindowRect(rcWin);
rcWin.OffsetRect(-rcWin.TopLeft());
pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pDC->Rectangle(rcWin);
m_ImgChePai.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
pWnd->ReleaseDC(pDC);
//文字
pWnd = GetDlgItem(IDC_TEXT_PIC);
pWnd->GetWindowRect(rcWin);
rcWin.OffsetRect(-rcWin.TopLeft());
pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pDC->Rectangle(rcWin);
m_ImgTextPic.Draw(pDC,CPoint(0,0),CSize(rcWin.Width(),rcWin.Height()));
pWnd->ReleaseDC(pDC);
}
BOOL CShowProcedure::DeleteDirectory(CString DirName)
{
CFileFind ff;
CString path=DirName;
if (path.Right(1)!="\\") {
path+="\\";
}
path+="*.*";
BOOL IsFinded=ff.FindFile(path);
while (IsFinded)
{
IsFinded=ff.FindNextFile();
if (!ff.IsDots()&&!ff.IsDirectory())
{
DeleteFile(ff.GetFilePath());
}
else if (ff.IsDots())
{
continue;
}
else if (ff.IsDirectory())
{
path=ff.GetFilePath();
DeleteDirectory(path);
RemoveDirectory(path);
}
}
RemoveDirectory(DirName);
ff.Close();
return TRUE;
}
void CShowProcedure::OnButtonOpen()
{
CFileDialog fileOpenDlg(TRUE, "jpg", "*.jpg;*.bmp",OFN_ALLOWMULTISELECT , "All Files(*.jpg;*.bmp)", NULL);
if(fileOpenDlg.DoModal()==IDOK)
{
m_ListCtrlFileName.DeleteAllItems();
CFileFind filefind;
m_strFolder = fileOpenDlg.GetPathName();
int nPos = m_strFolder.ReverseFind ('\\');
m_strFolder = m_strFolder.Left (nPos+1);
int nTop = 0;
if(filefind.FindFile(m_strFolder+"*.jpg"))
{
while (filefind.FindNextFile())
{
m_ListCtrlFileName.InsertItem(nTop++,filefind.GetFileName());
}
m_ListCtrlFileName.InsertItem(nTop++,filefind.GetFileName());
}
if(filefind.FindFile(m_strFolder+"*.bmp"))
{
while (filefind.FindNextFile())
{
m_ListCtrlFileName.InsertItem(nTop++,filefind.GetFileName());
}
m_ListCtrlFileName.InsertItem(nTop++,filefind.GetFileName());
}
}
}
void CShowProcedure::OnMenuOpen()
{
}
void CShowProcedure::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
BYTE CShowProcedure::GetThredHold(CImage &ImgIn, double dPercent)
{
BYTE pHist[3][256];
BYTE pMean[3];
double dS[3];
ImgIn.CalCulate(pHist,pMean,dS);
int nPix = ImgIn.GetWidth()*ImgIn.GetHeight();
double dSum = 0;
for(int i=0;i<256;i++)
{
dSum += pHist[0][i];
if (dSum/nPix>=dPercent)
{
break;
}
}
i = i>255?255:i;
return i;
}
BOOL CShowProcedure::OnInitDialog()
{
CDialog::OnInitDialog();
m_ListCtrlFileName.InsertColumn(0,"文件名",LVCFMT_LEFT,250);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CShowProcedure::OnButtonRec()
{
}
double CShowProcedure::m_dOutputList[]={0,1,2,3,4,5,6,7,8,9};
char CShowProcedure::m_cOutputList[]="0123456789";
void CShowProcedure::OnButtonTrain()
{
CString strPath;
strPath.Format("%sannInt.ann",GetAppPath());
m_BpNet.TrainInt(strPath);
}
void CShowProcedure::OnLButtonDown(UINT nFlags, CPoint point)
{
CWnd * pWnd;
CRect rcWin;
//原始图象
pWnd = GetDlgItem(IDC_ORG_IMAGE);
ClientToScreen(&point);
pWnd->GetWindowRect(rcWin);
if (rcWin.PtInRect(point))
{
m_ImgOrg.ShowImg();
}
//剪切后灰度的图象
pWnd = GetDlgItem(IDC_AFTER_CUT);
pWnd->GetWindowRect(rcWin);
if (rcWin.PtInRect(point))
{
m_ImgGray.ShowImg();
}
//二值化
pWnd = GetDlgItem(IDC_THRETHOLD);
pWnd->GetWindowRect(rcWin);
if (rcWin.PtInRect(point))
{
m_ImgTwo.ShowImg();
}
//定位图象
pWnd = GetDlgItem(IDC_LOCATION);
pWnd->GetWindowRect(rcWin);
if (rcWin.PtInRect(point))
{
m_ImgLocation.ShowImg();
}
//车牌
pWnd = GetDlgItem(IDC_CHE_PAI);
pWnd->GetWindowRect(rcWin);
if (rcWin.PtInRect(point))
{
m_ImgChePai.ShowImg();
}
//文字
pWnd = GetDlgItem(IDC_TEXT_PIC);
pWnd->GetWindowRect(rcWin);
if (rcWin.PtInRect(point))
{
m_ImgTextPic.ShowImg();
}
CDialog::OnLButtonDown(nFlags, point);
}
void CShowProcedure::OnRButtonDown(UINT nFlags, CPoint point)
{
char szFilter[] = "BMP Files (*.bmp)|*.bmp||";
CFileDialog fd(FALSE,"*.bmp",NULL,0,szFilter,this);
CWnd * pWnd;
CRect rcWin;
//原始图象
pWnd = GetDlgItem(IDC_ORG_IMAGE);
ClientToScreen(&point);
pWnd->GetWindowRect(rcWin);
if (rcWin.PtInRect(point))
{
if (fd.DoModal()==IDOK)
{
m_ImgOrg.SaveBMP(fd.GetPathName());
}
}
//剪切后灰度的图象
pWnd = GetDlgItem(IDC_AFTER_CUT);
pWnd->GetWindowRect(rcWin);
if (rcWin.PtInRect(point))
{
if (fd.DoModal()==IDOK)
{
m_ImgGray.SaveBMP(fd.GetPathName());
}
}
//二值化
pWnd = GetDlgItem(IDC_THRETHOLD);
pWnd->GetWindowRect(rcWin);
if (rcWin.PtInRect(point))
{
if (fd.DoModal()==IDOK)
{
m_ImgTwo.SaveBMP(fd.GetPathName());
}
}
//定位图象
pWnd = GetDlgItem(IDC_LOCATION);
pWnd->GetWindowRect(rcWin);
if (rcWin.PtInRect(point))
{
if (fd.DoModal()==IDOK)
{
m_ImgLocation.SaveBMP(fd.GetPathName());
}
}
//车牌
pWnd = GetDlgItem(IDC_CHE_PAI);
pWnd->GetWindowRect(rcWin);
if (rcWin.PtInRect(point))
{
if (fd.DoModal()==IDOK)
{
m_ImgChePai.SaveBMP(fd.GetPathName());
}
}
//文字
pWnd = GetDlgItem(IDC_TEXT_PIC);
pWnd->GetWindowRect(rcWin);
if(rcWin.PtInRect(point))
{
CImage ImgOut;
int step = (rcWin.right-rcWin.left)/7;
int j = 0;
for(int i=0;i<=7;i++)
{
if(point.x<(rcWin.left+i*step))
{
j = i-1;
break;
}
}
step = m_ImgTextPic.GetWidth()/7;
m_ImgTextPic.CutFromImg(ImgOut,CRect(j*step,0,(j+1)*step,m_ImgTextPic.GetHeight()));
// ImgOut.ShowImg();
if (fd.DoModal()==IDOK)
{
ImgOut.SaveBMP(fd.GetPathName());
}
}
CDialog::OnRButtonDown(nFlags, point);
}
CString CShowProcedure::TimeToString(COleDateTime time)
{
CString strOut;
strOut.Format("%d%d%d%d%d%d",
time.GetYear(),time.GetMonth(),time.GetDay(),
time.GetHour(),time.GetMinute(),time.GetSecond());
return strOut;
}
void CShowProcedure::OnButtonSaveAsExaple()
{
int nTop = 0;
CString strPath;
POSITION pos = m_TextImgList.GetHeadPosition();
COleDateTime time = COleDateTime::GetCurrentTime();
while (pos)
{
CImage imgTemp = m_TextImgList.GetNext(pos);
imgTemp.Stretch(CSize(32,64));
strPath.Format("%sExaple\\%s%d.bmp",
GetAppPath(),TimeToString(COleDateTime::GetCurrentTime()),nTop+1);
imgTemp.SaveBMP(strPath);
nTop++;
}
MessageBox("保存成功","提示信息");
}
void CShowProcedure::OnButtonLoadAnn()
{
CFileDialog fileOpenDlg(TRUE, "ANN", "*.ANN",OFN_ALLOWMULTISELECT , "All Files(*.*)", NULL);
if(fileOpenDlg.DoModal()==IDOK)
{
// m_BpNet.LoadBpNet(fileOpenDlg.GetPathName());
}
}
void CShowProcedure::OnButtonStop()
{
m_BpNet.m_BpNetChar.stop();
m_BpNet.m_BpNetInt.stop();
m_BpNet.m_BpNetInt1.stop();
m_RecBaseInt3.StopTrain();
}
void CShowProcedure::OnButtonAll()
{
UpdateData(TRUE);
MSG msg;
int nCount = m_ListCtrlFileName.GetItemCount();
for(int i=0;i<nCount;i++)
{
CString strFileName;
strFileName = m_ListCtrlFileName.GetItemText(i,0);
strFileName = m_strFolder + strFileName;
Run(strFileName);
::PeekMessage(&msg,NULL,0,0,PM_REMOVE);
::DispatchMessage(&msg);
msg.message=-1;
::DispatchMessage(&msg);//这样可以消除屏闪和假死机
}
}
void CShowProcedure::OnDblclkListFileList()
{
}
void CShowProcedure::OnClickListFileName(NMHDR* pNMHDR, LRESULT* pResult)
{
UpdateData(TRUE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -