首页 > 解决方案 > 在 Picturebox 中显示指纹

问题描述

我正在开发一个涉及保存指纹的功能,为此我使用了Digital Persona U 4500 reader.

下载并安装个人数字SDK并构建windows form c#应用程序。

我添加了名称为的控件:DigitalPersona Fingerprint Enrollment Control并且实际上捕获了指纹

在此处输入图像描述

目标是能够可视化放置在阅读器中的足迹,以详细了解它的情况,为此我添加了一个要在其中显示的图片框,另外还包括以下内容:

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;

使用前面的操作,它应该在图片中显示样本,但事实并非如此。有效并确定样本到达时为空。

我无法理解 Null 值,如果在放置足迹时我应该捕获该值,我将感谢您对该主题的一些指导。 在此处输入图像描述

标签: c#fingerprintdigital-persona-sdk

解决方案


OnCaptured事件中,您从Fiven获取图像数据Data.Views

注意:pbFingerprint是一个图片框,其中将显示图像。

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

推荐阅读