using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Biometric
{
public delegate void OnTemplateEventHandler(DPFP.Template template);
delegate void Function();
public partial class Default : System.Web.UI.Page,DPFP.Capture.EventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
Init();
Start();
}
protected void Start()
{
if (null != Capturer)
{
try
{
Capturer.StartCapture();
SetPrompt("Using the fingerprint reader, scan your fingerprint.");
}
catch
{
SetPrompt("Can't initiate capture!");
}
}
}
private DPFP.Processing.Enrollment Enroller;
protected void SetPrompt(string prompt)
{
this.Invoke(new Function(delegate()
{
Prompt.Text = prompt;
}));
}
protected void MakeReport(string message)
{
this.Invoke(new Function(delegate()
{
StatusText.Text += (message + "\r\n");
}));
}
private void DrawPicture(Bitmap bitmap)
{
this.Invoke(new Function(delegate()
{
//fringerprint.ImageUrl = new Bitmap(bitmap, fringerprint); // fit the image into the picture box
}));
}
Byte[] finger = null;
private void fun_get_tmplete_fromdis()
{
if (fringerprint.ImageUrl != null)
{
MemoryStream fingerprintData = new MemoryStream();
Template.Serialize(fingerprintData);
fingerprintData.Position = 0;
BinaryReader br = new BinaryReader(fingerprintData);
finger = br.ReadBytes((Int32)fingerprintData.Length);
br.Close();
}
}
protected virtual void Init()
{
try
{
Capturer = new DPFP.Capture.Capture();
if (null != Capturer)
Capturer.EventHandler = this;
else
SetPrompt("Can't initiate capture operation!");
Enroller = new DPFP.Processing.Enrollment();
UpdateStatus();
}
catch
{
}
}
#region EventHandler Members:
protected void Stop()
{
if (null != Capturer)
{
try
{
Capturer.StopCapture();
}
catch
{
SetPrompt("Can't terminate capture!");
}
}
}
private DPFP.Template Template;
private void fun_get_templete(DPFP.Template template)
{
this.Invoke(new Function(delegate()
{
Template = template;
if (Template != null)
{
string script = "alert(\"The fingerprint template is ready for fingerprint verification.\");";
ScriptManager.RegisterStartupScript(this, GetType(),
"ServerControlScript", script, true);
}
else
{
string script = "alert(\"The fingerprint template is not valid. Repeat fingerprint enrollment.\");";
ScriptManager.RegisterStartupScript(this, GetType(),
"ServerControlScript", script, true);
}
}));
}
protected virtual void Process(DPFP.Sample Sample)
{
DrawPicture(ConvertSampleToBitmap(Sample));
DPFP.FeatureSet features = ExtractFeatures(Sample, DPFP.Processing.DataPurpose.Enrollment);
if (features != null) try
{
MakeReport("The fingerprint feature set was created.");
Enroller.AddFeatures(features);
}
finally
{
UpdateStatus();
switch (Enroller.TemplateStatus)
{
case DPFP.Processing.Enrollment.Status.Ready:
fun_get_templete(Enroller.Template);
SetPrompt("Click Close, and then click Fingerprint Verification.");
break;
case DPFP.Processing.Enrollment.Status.Failed:
Enroller.Clear();
Stop();
UpdateStatus();
fun_get_templete(null);
break;
}
}
}
public void OnComplete(object Capture, string ReaderSerialNumber, DPFP.Sample Sample)
{
MakeReport("The fingerprint sample was captured.");
SetPrompt("Scan the same fingerprint again.");
Process(Sample);
}
public void OnFingerGone(object Capture, string ReaderSerialNumber)
{
MakeReport("The finger was removed from the fingerprint reader.");
}
public void OnFingerTouch(object Capture, string ReaderSerialNumber)
{
MakeReport("The fingerprint reader was touched.");
}
public void OnReaderConnect(object Capture, string ReaderSerialNumber)
{
MakeReport("The fingerprint reader was connected.");
}
public void OnReaderDisconnect(object Capture, string ReaderSerialNumber)
{
MakeReport("The fingerprint reader was disconnected.");
}
public void OnSampleQuality(object Capture, string ReaderSerialNumber, DPFP.Capture.CaptureFeedback CaptureFeedback)
{
if (CaptureFeedback == DPFP.Capture.CaptureFeedback.Good)
MakeReport("The quality of the fingerprint sample is good.");
else
MakeReport("The quality of the fingerprint sample is poor.");
}
#endregion
protected Bitmap ConvertSampleToBitmap(DPFP.Sample Sample)
{
DPFP.Capture.SampleConversion Convertor = new DPFP.Capture.SampleConversion();
Bitmap bitmap = null;
Convertor.ConvertToPicture(Sample, ref bitmap);
return bitmap;
}
protected DPFP.FeatureSet ExtractFeatures(DPFP.Sample Sample, DPFP.Processing.DataPurpose Purpose)
{
DPFP.Processing.FeatureExtraction Extractor = new DPFP.Processing.FeatureExtraction();
DPFP.Capture.CaptureFeedback feedback = DPFP.Capture.CaptureFeedback.None;
DPFP.FeatureSet features = new DPFP.FeatureSet();
Extractor.CreateFeatureSet(Sample, Purpose, ref feedback, ref features);
if (feedback == DPFP.Capture.CaptureFeedback.Good)
return features;
else
return null;
}
private void UpdateStatus()
{
// Show number of samples needed.
SetStatus(String.Format("Fingerprint samples needed: {0}", Enroller.FeaturesNeeded));
}
private DPFP.Capture.Capture Capturer;
protected void SetStatus(string status)
{
this.Invoke(new Function(delegate()
{
StatusLine.Text = status;
}));
}
}
}