StaticFPSysDlg.cpp
上传用户:hajddp
上传日期:2022-07-09
资源大小:3703k
文件大小:7k
源码类别:

图形图像处理

开发平台:

Visual C++

  1. // StaticFPSysDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "StaticFPSys.h"
  5. #include "StaticFPSysDlg.h"
  6. #include "FPA.H"
  7. #include "math.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CAboutDlg dialog used for App About
  15. LPVOID lpImage1 = new BYTE[SizeCDib];
  16. LPVOID lpImage2 = new BYTE[SizeCDib];
  17. BYTE *lpData1;
  18. BYTE *lpData2;
  19. int Width1, Height1;
  20. int Width2, Height2;
  21. CString ImagePathName1, ImagePathName2;
  22. BYTE lpFeature1[430];
  23. BYTE lpFeature2[430];
  24. class CAboutDlg : public CDialog
  25. {
  26. public:
  27. CAboutDlg();
  28. // Dialog Data
  29. //{{AFX_DATA(CAboutDlg)
  30. enum { IDD = IDD_ABOUTBOX };
  31. //}}AFX_DATA
  32. // ClassWizard generated virtual function overrides
  33. //{{AFX_VIRTUAL(CAboutDlg)
  34. protected:
  35. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  36. //}}AFX_VIRTUAL
  37. // Implementation
  38. protected:
  39. //{{AFX_MSG(CAboutDlg)
  40. //}}AFX_MSG
  41. DECLARE_MESSAGE_MAP()
  42. };
  43. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  44. {
  45. //{{AFX_DATA_INIT(CAboutDlg)
  46. //}}AFX_DATA_INIT
  47. }
  48. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  49. {
  50. CDialog::DoDataExchange(pDX);
  51. //{{AFX_DATA_MAP(CAboutDlg)
  52. //}}AFX_DATA_MAP
  53. }
  54. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  55. //{{AFX_MSG_MAP(CAboutDlg)
  56. // No message handlers
  57. //}}AFX_MSG_MAP
  58. END_MESSAGE_MAP()
  59. /////////////////////////////////////////////////////////////////////////////
  60. // CStaticFPSysDlg dialog
  61. CStaticFPSysDlg::CStaticFPSysDlg(CWnd* pParent /*=NULL*/)
  62. : CDialog(CStaticFPSysDlg::IDD, pParent)
  63. {
  64. //{{AFX_DATA_INIT(CStaticFPSysDlg)
  65. // NOTE: the ClassWizard will add member initialization here
  66. //}}AFX_DATA_INIT
  67. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  68. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  69. }
  70. void CStaticFPSysDlg::DoDataExchange(CDataExchange* pDX)
  71. {
  72. //{{AFX_DATA_MAP(CStaticFPSysDlg)
  73. DDX_Control(pDX, IDC_STATIC_IMG1, m_img1);
  74. //}}AFX_DATA_MAP
  75. }
  76. BEGIN_MESSAGE_MAP(CStaticFPSysDlg, CDialog)
  77. //{{AFX_MSG_MAP(CStaticFPSysDlg)
  78. ON_WM_SYSCOMMAND()
  79. ON_WM_PAINT()
  80. ON_WM_QUERYDRAGICON()
  81. ON_BN_CLICKED(IDC_BUTTON_OPEN1, OnButtonOpen1)
  82. ON_BN_CLICKED(IDC_BUTTON_OPEN2, OnButtonOpen2)
  83. ON_BN_CLICKED(IDC_BUTTON_MATCH, OnButtonMatch)
  84. ON_BN_CLICKED(IDC_BUTTON_TEST, OnButtonTest)
  85. //}}AFX_MSG_MAP
  86. END_MESSAGE_MAP()
  87. /////////////////////////////////////////////////////////////////////////////
  88. // CStaticFPSysDlg message handlers
  89. BOOL CStaticFPSysDlg::OnInitDialog()
  90. {
  91. CDialog::OnInitDialog();
  92. // Add "About..." menu item to system menu.
  93. // IDM_ABOUTBOX must be in the system command range.
  94. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  95. ASSERT(IDM_ABOUTBOX < 0xF000);
  96. CMenu* pSysMenu = GetSystemMenu(FALSE);
  97. if (pSysMenu != NULL)
  98. {
  99. CString strAboutMenu;
  100. strAboutMenu.LoadString(IDS_ABOUTBOX);
  101. if (!strAboutMenu.IsEmpty())
  102. {
  103. pSysMenu->AppendMenu(MF_SEPARATOR);
  104. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  105. }
  106. }
  107. // Set the icon for this dialog.  The framework does this automatically
  108. //  when the application's main window is not a dialog
  109. SetIcon(m_hIcon, TRUE); // Set big icon
  110. SetIcon(m_hIcon, FALSE); // Set small icon
  111. // TODO: Add extra initialization here
  112. return TRUE;  // return TRUE  unless you set the focus to a control
  113. }
  114. void CStaticFPSysDlg::OnSysCommand(UINT nID, LPARAM lParam)
  115. {
  116. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  117. {
  118. CAboutDlg dlgAbout;
  119. dlgAbout.DoModal();
  120. }
  121. else
  122. {
  123. CDialog::OnSysCommand(nID, lParam);
  124. }
  125. }
  126. // If you add a minimize button to your dialog, you will need the code below
  127. //  to draw the icon.  For MFC applications using the document/view model,
  128. //  this is automatically done for you by the framework.
  129. void CStaticFPSysDlg::OnPaint() 
  130. {
  131. if (IsIconic())
  132. {
  133. CPaintDC dc(this); // device context for painting
  134. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  135. // Center icon in client rectangle
  136. int cxIcon = GetSystemMetrics(SM_CXICON);
  137. int cyIcon = GetSystemMetrics(SM_CYICON);
  138. CRect rect;
  139. GetClientRect(&rect);
  140. int x = (rect.Width() - cxIcon + 1) / 2;
  141. int y = (rect.Height() - cyIcon + 1) / 2;
  142. // Draw the icon
  143. dc.DrawIcon(x, y, m_hIcon);
  144. }
  145. else
  146. {
  147. CDialog::OnPaint();
  148. }
  149. }
  150. // The system calls this to obtain the cursor to display while the user drags
  151. //  the minimized window.
  152. HCURSOR CStaticFPSysDlg::OnQueryDragIcon()
  153. {
  154. return (HCURSOR) m_hIcon;
  155. }
  156. void CStaticFPSysDlg::OnButtonOpen1() 
  157. {
  158. // TODO: Add your control notification handler code here
  159. CFileDialog dlg(TRUE,"bmp",".bmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Bitmap (*.BMP)|*.BMP||");
  160. HBITMAP m_hImage;
  161. if (dlg.DoModal() != IDOK) return;
  162. ImagePathName1 = dlg.GetPathName();
  163. m_hImage = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
  164. dlg.GetPathName(),
  165. IMAGE_BITMAP,
  166. 0,
  167. 0,
  168. LR_LOADFROMFILE|LR_CREATEDIBSECTION);
  169. GetDlgItem(IDC_STATIC_IMG1)->SendMessage(STM_SETIMAGE,IMAGE_BITMAP, (LPARAM)m_hImage);
  170. FPA_CreateImage(lpImage1);
  171. FPA_LoadImage(ImagePathName1, lpImage1, &lpData1, &Width1, &Height1);
  172. int lpSize1;
  173. FPA_AnalyzeFeature_File(ImagePathName1, lpFeature1, &lpSize1);
  174. }
  175. void CStaticFPSysDlg::OnButtonOpen2() 
  176. {
  177. CFileDialog dlg(TRUE,"bmp",".bmp",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Bitmap (*.BMP)|*.BMP||");
  178. HBITMAP m_hImage;
  179. if (dlg.DoModal() != IDOK) return;
  180. ImagePathName2 = dlg.GetPathName();
  181. m_hImage = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
  182. dlg.GetPathName(),
  183. IMAGE_BITMAP,
  184. 0,
  185. 0,
  186. LR_LOADFROMFILE|LR_CREATEDIBSECTION);
  187. GetDlgItem(IDC_STATIC_IMG2)->SendMessage(STM_SETIMAGE,IMAGE_BITMAP, (LPARAM)m_hImage);
  188. FPA_CreateImage(lpImage2);
  189. FPA_LoadImage(ImagePathName2, lpImage2, &lpData2, &Width2, &Height2);
  190. int lpSize2;
  191. FPA_AnalyzeFeature_File(ImagePathName2, lpFeature2, &lpSize2);
  192. }
  193. void CStaticFPSysDlg::OnButtonMatch() 
  194. {
  195. // TODO: Add your control notification handler code here
  196. int score;
  197. FPA_PatternMatch(lpFeature1, lpFeature2, &score);
  198. //FPA_Match(lpFeature1, lpFeature2, &score);
  199. if (score > 60)
  200. {
  201. AfxMessageBox("Same Fingerprint!");
  202. }
  203. else
  204. {
  205. AfxMessageBox("Different Fingerprints");
  206. }
  207. }
  208. void CStaticFPSysDlg::OnCancel() 
  209. {
  210. // TODO: Add extra cleanup here
  211. FPA_CloseImage(lpImage1);
  212. FPA_CloseImage(lpImage2);
  213. CDialog::OnCancel();
  214. }
  215. void CStaticFPSysDlg::OnButtonTest() 
  216. {
  217. BYTE *lpZoom = new BYTE[Width1 * Height1];
  218. BYTE *lpOrient = new BYTE[Width1 * Height1];
  219. FPA_ZoomOut(lpData1, lpZoom, Width1, Height1);
  220. FPA_OrientationFields(lpZoom, lpOrient, Width1, Height1, 6);
  221. POINT Core[30];
  222. int Num_Core = 0;
  223. /* getSingular(lpOrient, Width1, Height1, &Num_Core, Core, -1);
  224. CDC *myDC = m_img1.GetDC();
  225. COLORREF red = RGB(255, 0, 0);
  226. CBrush br;
  227. br.CreateSolidBrush(red);
  228. CDC *dc = myDC;
  229. dc->SelectObject(br);
  230. for(int i = 0; i < Num_Core; i++)
  231. {
  232. int x = Core[i].x;
  233. int y = Core[i].y;
  234. CRect rc;
  235. rc.left = x - 5;
  236. rc.right = x + 5;
  237. rc.top = 360 - (y - 5);
  238. rc.bottom = 360 - (y + 5);
  239. dc->Draw3dRect(&rc, red, red);
  240. CString coord;
  241. coord.Format("(%d, %d)", x, y);
  242. dc->TextOut(rc.left, rc.top, coord);
  243. dc->DrawFocusRect(&rc);
  244. }*/
  245. }