Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using libzkfpcsharp;
- using System;
- using System.Drawing;
- using System.IO;
- using System.Runtime.InteropServices;
- using System.Threading;
- using System.Windows.Forms;
- namespace Futvalle.view.huellas
- {
- public partial class FrmRegistrarHuella : Form
- {
- public static byte[] fingerprint = new byte[2048];
- IntPtr mDevHandle = IntPtr.Zero;
- IntPtr mDBHandle = IntPtr.Zero;
- IntPtr FormHandle = IntPtr.Zero;
- bool bIsTimeToDie = false;
- bool IsRegister = false;
- bool bIdentify = true;
- byte[] FPBuffer;
- int RegisterCount = 0;
- const int REGISTER_FINGER_COUNT = 3;
- byte[][] RegTmps = new byte[3][];
- byte[] RegTmp = new byte[2048];
- byte[] CapTmp = new byte[2048];
- int cbCapTmp = 2048;
- int cbRegTmp = 0;
- int iFid = 1;
- private int mfpWidth = 0;
- private int mfpHeight = 0;
- private int mfpDpi = 0;
- const int MESSAGE_CAPTURED_OK = 0x0400 + 6;
- [DllImport("user32.dll", EntryPoint = "SendMessageA")]
- public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);
- public FrmRegistrarHuella()
- {
- InitializeComponent();
- fingerprint = new byte[2048];
- }
- private void Init()
- {
- if (zkfp2.Init() == zkfperrdef.ZKFP_ERR_OK)
- {
- int nCount = zkfp2.GetDeviceCount();
- if (nCount > 0)
- {
- Console.WriteLine("Sistema de huellas correctamente inicializado.");
- }
- else
- {
- zkfp2.Terminate();
- MessageBox.Show("Ningún dispositivo conectado");
- Close();
- }
- }
- else
- {
- MessageBox.Show("Inicialización fallida. Vuelve a conectar el lector y reinicia la aplicación.");
- Close();
- }
- }
- private void CloseDevice()
- {
- bIsTimeToDie = true;
- RegisterCount = 0;
- Thread.Sleep(1000);
- zkfp2.CloseDevice(mDevHandle);
- btnRegistrar.Enabled = false;
- }
- private void OpenFingerprintReader()
- {
- int ret = zkfp.ZKFP_ERR_OK;
- if (IntPtr.Zero == (mDevHandle = zkfp2.OpenDevice(0)))
- {
- MessageBox.Show("Error al conectar con el lector de huellas. Vuelve a conectar el lector y reinicia la aplicación.");
- Close();
- return;
- }
- if (IntPtr.Zero == (mDBHandle = zkfp2.DBInit()))
- {
- MessageBox.Show("Error al iniciar la base de datos.");
- Close();
- zkfp2.CloseDevice(mDevHandle);
- mDevHandle = IntPtr.Zero;
- return;
- }
- zkfp2.DBClear(mDBHandle);
- btnRegistrar.Enabled = true;
- RegisterCount = 0;
- cbRegTmp = 0;
- iFid = 1;
- for (int i = 0; i < 3; i++)
- {
- RegTmps[i] = new byte[2048];
- }
- byte[] paramValue = new byte[4];
- int size = 4;
- zkfp2.GetParameters(mDevHandle, 1, paramValue, ref size);
- zkfp2.ByteArray2Int(paramValue, ref mfpWidth);
- size = 4;
- zkfp2.GetParameters(mDevHandle, 2, paramValue, ref size);
- zkfp2.ByteArray2Int(paramValue, ref mfpHeight);
- FPBuffer = new byte[mfpWidth * mfpHeight];
- size = 4;
- zkfp2.GetParameters(mDevHandle, 3, paramValue, ref size);
- zkfp2.ByteArray2Int(paramValue, ref mfpDpi);
- //textRes.AppendText("Parámetros del lector, ancho de la imagen:" + mfpWidth + ", alto de la imagen:" + mfpHeight + ", densidad de píxeles:" + mfpDpi + "\n");
- Thread captureThread = new Thread(new ThreadStart(DoCapture));
- captureThread.IsBackground = true;
- captureThread.Start();
- bIsTimeToDie = false;
- textRes.AppendText("Conexión exitosa\n");
- Console.WriteLine("Lector de huellas reconocido");
- }
- private void Free()
- {
- zkfp2.Terminate();
- cbRegTmp = 0;
- btnRegistrar.Enabled = false;
- }
- private void BnIdentify_Click(object sender, EventArgs e)
- {
- if (!bIdentify)
- {
- bIdentify = true;
- textRes.AppendText("Por favor, presiona tu dedo...\n");
- }
- }
- private void BnVerify_Click(object sender, EventArgs e)
- {
- if (bIdentify)
- {
- bIdentify = false;
- textRes.AppendText("Por favor, presiona tu dedo...\n");
- }
- }
- private void DoCapture()
- {
- while (!bIsTimeToDie)
- {
- cbCapTmp = 2048;
- int ret = zkfp2.AcquireFingerprint(mDevHandle, FPBuffer, CapTmp, ref cbCapTmp);
- if (ret == zkfp.ZKFP_ERR_OK)
- {
- SendMessage(FormHandle, MESSAGE_CAPTURED_OK, IntPtr.Zero, IntPtr.Zero);
- Console.WriteLine("Huella capturada, enviando mensaje...");
- }
- Thread.Sleep(200);
- }
- }
- protected override void DefWndProc(ref Message m)
- {
- switch (m.Msg)
- {
- case MESSAGE_CAPTURED_OK:
- {
- MemoryStream ms = new MemoryStream();
- BitmapFormat.GetBitmap(FPBuffer, mfpWidth, mfpHeight, ref ms);
- Bitmap bmp = new Bitmap(ms);
- picFPImg.Image = bmp;
- //textRes.AppendText("capture template data:" + strShow + "\n");
- if (IsRegister)
- {
- int fid = 0, score = 0;
- int ret = zkfp2.DBIdentify(mDBHandle, CapTmp, ref fid, ref score);
- if (zkfp.ZKFP_ERR_OK == ret)
- {
- textRes.AppendText("¡Esa huella ya fue registrada por el ID " + fid + "!\n");
- return;
- }
- if (RegisterCount > 0 && zkfp2.DBMatch(mDBHandle, CapTmp, RegTmps[RegisterCount - 1]) <= 0)
- {
- textRes.AppendText("Por favor, presiona el mismo dedo 3 veces para realizar el registro...\n");
- return;
- }
- Array.Copy(CapTmp, RegTmps[RegisterCount], cbCapTmp);
- RegisterCount++;
- if (RegisterCount >= REGISTER_FINGER_COUNT)
- {
- RegisterCount = 0;
- if (zkfp.ZKFP_ERR_OK == (ret = zkfp2.DBMerge(mDBHandle, RegTmps[0], RegTmps[1], RegTmps[2], RegTmp, ref cbRegTmp)) &&
- zkfp.ZKFP_ERR_OK == (ret = zkfp2.DBAdd(mDBHandle, iFid, RegTmp)))
- {
- iFid++;
- textRes.AppendText("¡Registro exitoso!\n");
- btnGuardar.Enabled = true;
- btnGuardar.BackColor = Color.FromArgb(67, 96, 176);
- btnGuardar.ForeColor = Color.White;
- }
- else
- {
- textRes.AppendText("Registro fallido, código de error = " + ret + "\n");
- }
- IsRegister = false;
- return;
- }
- else
- {
- if (REGISTER_FINGER_COUNT - RegisterCount == 1)
- textRes.AppendText("Presiona " + (REGISTER_FINGER_COUNT - RegisterCount) + " vez tu dedo...\n");
- else
- textRes.AppendText("Presiona " + (REGISTER_FINGER_COUNT - RegisterCount) + " veces tu dedo...\n");
- }
- }
- else
- {
- if (cbRegTmp <= 0)
- {
- textRes.AppendText("Por favor, registra tu huella primero.\n");
- return;
- }
- if (bIdentify)
- {
- int fid = 0, score = 0;
- int ret = zkfp2.DBIdentify(mDBHandle, CapTmp, ref fid, ref score);
- if (zkfp.ZKFP_ERR_OK == ret)
- {
- textRes.AppendText("¡Identificación exitosa, fid= " + fid + ", puntuación = " + score + "!\n");
- return;
- }
- else
- {
- textRes.AppendText("Identificación fallida, error = " + ret + "\n");
- return;
- }
- }
- else
- {
- int ret = zkfp2.DBMatch(mDBHandle, CapTmp, RegTmp);
- if (0 < ret)
- {
- textRes.AppendText("Match finger succ, score=" + ret + "!\n");
- return;
- }
- else
- {
- textRes.AppendText("Match finger fail, ret= " + ret + "\n");
- return;
- }
- }
- }
- }
- break;
- default:
- base.DefWndProc(ref m);
- break;
- }
- }
- private void FrmPruebaHuella_Load(object sender, EventArgs e)
- {
- FormHandle = Handle;
- Init();
- OpenFingerprintReader();
- }
- private void FrmPruebaHuella_FormClosing(object sender, FormClosingEventArgs e)
- {
- Console.WriteLine("Cerrando el lector de huellas.");
- CloseDevice();
- Free();
- }
- private void BtnGuardar_Click(object sender, EventArgs e)
- {
- fingerprint = RegTmp;
- Close();
- }
- private void BtnRegistrar_Click(object sender, EventArgs e)
- {
- if (!IsRegister)
- {
- IsRegister = true;
- RegisterCount = 0;
- cbRegTmp = 0;
- textRes.AppendText("Por favor, presiona tu dedo 3 veces\n");
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement