Show Fingerprint in Picturebox

1k views Asked by At

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

enter image description here

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. enter image description here

1

There are 1 answers

0
Octavio Galindo On BEST ANSWER

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;
    }