I am developing a functionality that involves saving the fingerprint, for this function I have used the Digital Persona U 4500 reader.
Download and install the personal digital SDK and build a windows form c # application.
I added the control whose name: DigitalPersona Fingerprint Enrollment Control
and in effect captures the fingerprint
The objective is to be able to visualize the footprint that has been placed in the reader to see in detail how it has been, for this purpose I added a picturebox to be displayed in it and additionally include the following:
public DPFP.Sample Sample = new DPFP.Sample();// instancia la muestra
DPFP.Capture.SampleConversion Convertor = new DPFP.Capture.SampleConversion();
Bitmap bitmap = null;
Convertor.ConvertToPicture(sample, ref bitmap);
PicBoxHuella.Image = bitmap;
With the previous action it should show the sample in the picture, but it is not. Valid and identified that the sample arrives in null.
I can't understand the Null value, if when putting a footprint I should capture the value, I would appreciate your guidance a bit on the subject.
On the OnCaptured
event, you get the image data from the Fiv
en Data.Views
:
Note: pbFingerprint
is an PictureBox where the image will display.
private void enrollment_OnCaptured(EnrollmentControl enrollmentControl, CaptureResult captureResult, int fingerPosition)
{
if (captureResult.ResultCode == Constants.ResultCode.DP_SUCCESS)
{
if (captureResult.Data != null)
{
foreach (Fid.Fiv fiv in captureResult.Data.Views)
{
pbFingerprint.Image = CreateBitmap(fiv.RawImage, fiv.Width, fiv.Height);
}
}
}
}
/// <summary>
/// Create a bitmap from raw data in row/column format.
/// </summary>
/// <param name="bytes"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>
private Bitmap CreateBitmap(byte[] bytes, int width, int height)
{
byte[] rgbBytes = new byte[bytes.Length * 3];
for (int i = 0; i <= bytes.Length - 1; i++)
{
rgbBytes[(i * 3)] = bytes[i];
rgbBytes[(i * 3) + 1] = bytes[i];
rgbBytes[(i * 3) + 2] = bytes[i];
}
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
BitmapData data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
for (int i = 0; i <= bmp.Height - 1; i++)
{
IntPtr p = new IntPtr(data.Scan0.ToInt64() + data.Stride * i);
System.Runtime.InteropServices.Marshal.Copy(rgbBytes, i * bmp.Width * 3, p, bmp.Width * 3);
}
bmp.UnlockBits(data);
return bmp;
}