Click here to Skip to main content
15,878,814 members
Please Sign up or sign in to vote.
5.00/5 (1 vote)
C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using Neurotec.Biometrics;
using Neurotec.Gui;


namespace CSharpSample
{
	public partial class MainForm : Form
	{
		Nffv _engine;
		string _userDatabaseFile;
		UserDatabase _userDB;

		public MainForm(Nffv engine, string userDatabaseFile)
		{
			_engine = engine;

			_userDatabaseFile = userDatabaseFile;
			try
			{
				_userDB = UserDatabase.ReadFromFile(userDatabaseFile);
			}
			catch
			{
				_userDB = new UserDatabase();
			}

			InitializeComponent();
		}

		private void MainForm_Load(object sender, EventArgs e)
		{
			foreach (NffvUser engineUser in _engine.Users)
			{
				string id = engineUser.Id.ToString();
				UserRecord userRec = _userDB.Lookup(engineUser.Id);
				if (userRec != null)
				{
					id = userRec.Name;
				}
				lbDatabase.Items.Add(new CData(engineUser, id));
			}
			if (lbDatabase.Items.Count > 0)
				lbDatabase.SelectedIndex = 0;
		}

		internal class EnrollmentResult
		{
			public NffvStatus engineStatus;
			public NffvUser engineUser;
		};

		private void btnEnroll_Click(object sender, EventArgs e)
		{
			EnrollForm enrollDlg = new EnrollForm();
			if (enrollDlg.ShowDialog() == DialogResult.OK)
			{
				try
				{
					RunWorkerCompletedEventArgs taskResult = BusyForm.RunLongTask("Waiting for fingerprint ...", new DoWorkEventHandler(doEnroll),
						false, null, new EventHandler(CancelScanningHandler));
					EnrollmentResult enrollmentResult = (EnrollmentResult)taskResult.Result;
					if (enrollmentResult.engineStatus == NffvStatus.TemplateCreated)
					{
						NffvUser engineUser = enrollmentResult.engineUser;
						string userName = enrollDlg.UserName;
						if (userName.Length <= 0)
						{
							userName = engineUser.Id.ToString();
						}

						_userDB.Add(new UserRecord(engineUser.Id, userName));
						try
						{
							_userDB.WriteToFile(_userDatabaseFile);
						}
						catch { }

						pbExtractedImage.Image = engineUser.GetBitmap();
						lbDatabase.Items.Add(new CData(engineUser, userName));
						lbDatabase.SelectedIndex = lbDatabase.Items.Count - 1;
					}
					else
					{
						NffvStatus engineStatus = enrollmentResult.engineStatus;
						MessageBox.Show(string.Format("Enrollment was not finished. Reason: {0}", engineStatus));
					}
				}
				catch (Exception ex)
				{
					MessageBox.Show(ex.Message);
				}
			}
		}

		private void doEnroll(object sender, DoWorkEventArgs args)
		{
			EnrollmentResult enrollmentResults = new EnrollmentResult();
			enrollmentResults.engineUser = _engine.Enroll(20000, out enrollmentResults.engineStatus);
			args.Result = enrollmentResults;
		}

		internal class VerificationResult
		{
			public NffvStatus engineStatus;
			public int score;
		};

		private void btnVerify_Click(object sender, EventArgs e)
		{
			if (lbDatabase.SelectedIndex < 0)
			{
				MessageBox.Show("Please select a record from the database.");
			}
			else
			{
				try
				{
					RunWorkerCompletedEventArgs taskResult = BusyForm.RunLongTask("Waiting for fingerprint ...", new DoWorkEventHandler(doVerify),
						false, ((CData)lbDatabase.SelectedItem).EngineUser, new EventHandler(CancelScanningHandler));
					VerificationResult verificationResult = (VerificationResult)taskResult.Result;
					if (verificationResult.engineStatus == NffvStatus.TemplateCreated)
					{
						if (verificationResult.score > 0)
						{
							MessageBox.Show(string.Format("{0} verified.\r\nFingerprints match. Score: {1}", ((CData)lbDatabase.SelectedItem).Name, verificationResult.score));
						}
						else
						{
							MessageBox.Show(string.Format("{0} not verified.\r\nFingerprints do not match. Score: {1}", ((CData)lbDatabase.SelectedItem).Name, verificationResult.score));
						}
					}
					else
					{
						MessageBox.Show(string.Format("Verification was not finished. Reason: {0}", verificationResult.engineStatus));
					}
				}
				catch (Exception ex)
				{
					MessageBox.Show(ex.Message);
				}
			}
		}

		private void doVerify(object sender, DoWorkEventArgs args)
		{
			VerificationResult verificationResult = new VerificationResult();
			verificationResult.score = _engine.Verify((NffvUser)args.Argument, 20000, out verificationResult.engineStatus);
			args.Result = verificationResult;
		}

		private void CancelScanningHandler(object sender, EventArgs e)
		{
			_engine.Cancel();
		}

		private void btnDeleteUser_Click(object sender, EventArgs e)
		{
			if (lbDatabase.SelectedIndex < 0)
			{
				MessageBox.Show("Please select a record from the database.");
			}
			else
			{
				_userDB.Remove(_userDB.Lookup(((CData)lbDatabase.SelectedItem).ID));
				try
				{
					_userDB.WriteToFile(_userDatabaseFile);
				}
				catch { }

				_engine.Users.RemoveAt(lbDatabase.SelectedIndex);
				lbDatabase.Items.RemoveAt(lbDatabase.SelectedIndex);
				if (lbDatabase.Items.Count > 0)
					lbDatabase.SelectedIndex = 0;
			}
		}

		private void btnClearDatabase_Click(object sender, EventArgs e)
		{
			if (MessageBox.Show("All records will be deleted from database. Do you want to continue?", "Confirm delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
			{
				return;
			}

			_engine.Users.Clear();
			lbDatabase.Items.Clear();

			_userDB.Clear();
			try
			{
				_userDB.WriteToFile(_userDatabaseFile);
			}
			catch { }
		}

		private void btnSettings_Click(object sender, EventArgs e)
		{
			SettingsForm settingsForm = new SettingsForm();
			settingsForm.LoadFromEngine(_engine);
			if (settingsForm.ShowDialog() == DialogResult.OK)
			{
				settingsForm.SaveToEngine(_engine);
			}
		}

		private void btnAbout_Click(object sender, EventArgs e)
		{
			AboutForm aboutForm = new AboutForm();
			aboutForm.ShowDialog();
		}

		private void lbDatabase_DoubleClick(object sender, EventArgs e)
		{
			if (lbDatabase.SelectedItem != null)
			{
				CData userData = (CData)lbDatabase.SelectedItem;
				UserInfoForm userInfoForm = new UserInfoForm();
				userInfoForm.UserName = userData.Name;
				userInfoForm.UserFingerprintImage = userData.Image;
				userInfoForm.ShowDialog();
			}
		}

        private void pbExtractedImage_Click(object sender, EventArgs e)
        {

        }
	}

	class CData : IDisposable
	{
		private NffvUser _engineUser;
		private Bitmap _image;
		private string _name;

		public CData(NffvUser engineUser, string name)
		{
			_engineUser = engineUser;
			_image = engineUser.GetBitmap();
			_name = name;
		}

		public NffvUser EngineUser
		{
			get
			{
				return _engineUser;
			}
		}

		public Bitmap Image
		{
			get
			{
				return _image;
			}
		}

		public int ID
		{
			get
			{
				return _engineUser.Id;
			}
		}

		public string Name
		{
			get
			{
				return _name;
			}
			set
			{
				_name = value;
			}
		}

		public override string ToString()
		{
			return Name;
		}

		#region IDisposable Members

		public void Dispose()
		{
			if (_image != null)
			{
				_image.Dispose();
				_image = null;
			}
		}

		#endregion
	}
}
Posted
Updated 4-Jan-15 4:45am
v2
Comments
Richard MacCutchan 4-Jan-15 11:30am    
Please edit your post and explain exactly what you are trying to achieve.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900