0

我正在使用 ZKFinger SDK2.3.3.1 版本和设备通信协议 SDK(32Bit Ver6.2.4.1 -- DLL 版本:zkemkeeper.dll - 6.2.4.1。我有一个小型 USB 指纹扫描仪。当我扫描指纹时,

我得到一个字节数组。我将它以位图文件和 jpg 格式保存到光盘上,指纹扫描后看起来相当不错。为了给设备上的用户设置指纹模板,我解压了指纹图像,然后调用 zkemkeeper.dll 的 SetUserTmp 函数。

I am getting size error , (-3) in code.

How can i go further? What is my mistake? 

下面是我将手指从 USB 设备传输到 BioMetric 设备的代码

   bool fullImage = false;

            zkfpEng.SaveJPG("Myfirstfinger.jpg");

            string strtmp, sRegTemplate;
            object pTemplate;


            sRegTemplate = zkfpEng.GetTemplateAsStringEx("9");

            pTemplate = zkfpEng.DecodeTemplate1(sRegTemplate);

            // Note: 10.0Template can not be compressed
            zkfpEng.SetTemplateLen(ref pTemplate, 602);
            zkfpEng.SaveTemplate("Myfirstfingerprint.tpl", pTemplate);



            byte[] TmpData = new byte[700];

            TmpData =ObjectToByteArray(pTemplate);



            if (bIsConnected == false)
            {
                MessageBox.Show("Please connect the device first!", "Error");
                return;
            }



            int idwFingerIndex = Convert.ToInt32(cbFingerIndex.Text.Trim());

            int idwEnrollNumber = Convert.ToInt32(txtUserID.Text.Trim());
            int iTmpLength = 0;
            string sdwEnrollNumber = txtUserID.Text.Trim();


            axCZKEM1.EnableDevice(iMachineNumber, false);
            Cursor = Cursors.WaitCursor;
            bool IsSetTmp = false;

            IsSetTmp = axCZKEM1.SetUserTmp(iMachineNumber, idwEnrollNumber, idwFingerIndex, ref TmpData[0]);
            int errCode = 0;
            axCZKEM1.GetLastError(ref errCode);
            MessageBox.Show(IsSetTmp.ToString() + " " + errCode.ToString());
            if (IsSetTmp == true)
            {
                MessageBox.Show("User template set successfully!", "Success");
            }
            else
            {
                MessageBox.Show("User template not set successfully!", "Error");
            }
4

2 回答 2

2

我认为您不必将其转换为图像文件,就像 Remin 说的那样。这里有一些例子。我正在使用 xaf 和 mysql 数据库

private void DownloadUserInformationAction_Execute(object sender, SimpleActionExecuteEventArgs e)
    {
        IObjectSpace os = Application.CreateObjectSpace();
        Terminal terminal = (Terminal)View.SelectedObjects[0];

        //create new czkemclass obj
        CZKEMClass myCZKEMClass = new CZKEMClass();

        //connecting the device
        myCZKEMClass.Connect_Net(terminal.IPAddress, terminal.Port);

        //Initialize variable for store temporary user information
        int tMachineNo = 0;
        string tEnrollNo = "";
        string tName = "";
        string tPassword = "";
        int tPrivilage = 0;
        bool tEnabled = false;
        int tFingerIndex;
        int tFlag = 0;
        string tTemplateData = "";
        int tTemplateLength = 0;
        myCZKEMClass.EnableDevice(terminal.DeviceId, false);
        myCZKEMClass.ReadAllUserID(terminal.DeviceId);
        myCZKEMClass.ReadAllTemplate(terminal.DeviceId);
        while (myCZKEMClass.SSR_GetAllUserInfo(tMachineNo, out tEnrollNo, out tName, out tPassword, out tPrivilage, out tEnabled))
        {
            for (tFingerIndex = 0; tFingerIndex < 10; tFingerIndex++)
            {
                if (myCZKEMClass.GetUserTmpExStr(tMachineNo, tEnrollNo, tFingerIndex, out tFlag, out tTemplateData, out tTemplateLength))
                {
                    EmployeeBiometric employeeBiometric = new EmployeeBiometric(terminal.Session);
                    //employeeBiometric.EnrollNumber = tEnrollNo;
                    XPCollection<Employee> employees = new XPCollection<Employee>(terminal.Session);
                    employeeBiometric.Employee = employees.Where(emp => emp.EnrollNo == tEnrollNo).FirstOrDefault();//(emp => emp.Sequence.ToString() == tEnrollNo).FirstOrDefault();
                    employeeBiometric.UserName = tName;
                    employeeBiometric.Password = tPassword;
                    employeeBiometric.Privilege = (Privilege)Enum.ToObject(typeof(Privilege), tPrivilage);
                    employeeBiometric.Enabled = tEnabled;
                    employeeBiometric.FingerprintIndex = tFingerIndex;
                    employeeBiometric.FingerprintTemplate = tTemplateData;
                    employeeBiometric.TemplateLength = tTemplateLength;
                    terminal.Session.CommitTransaction();

                }

            }
        }
        myCZKEMClass.EnableDevice(terminal.DeviceId, true);
    }

这是将指纹图像从设备下载到应用程序的方法。

在这里您可以将其上传回另一台设备

private void UploadUserInformationAction_Execute(object sender, PopupWindowShowActionExecuteEventArgs e)
    {
        IObjectSpace os = Application.CreateObjectSpace();
        EmployeeBiometric employeeBiometric = (EmployeeBiometric)View.SelectedObjects[0];
        EmployeeBiometricParameter param = (EmployeeBiometricParameter)e.PopupWindowViewCurrentObject;

        //create new czkemclass obj
        CZKEMClass myCZKEMClass = new CZKEMClass();

        //connecting the device
        myCZKEMClass.Connect_Net(param.Terminal.IPAddress, param.Terminal.Port);
        myCZKEMClass.EnableDevice(param.Terminal.DeviceId, false);


        int myCount = View.SelectedObjects.Count;
        //Set specific user to fingerprint device
        for (int i = 1; i <= myCount; i++)
        {
            int tMachineNo = param.Terminal.DeviceId;
            string tEnrollNo = employeeBiometric.Employee.EnrollNo;//Sequence.ToString();
            string tName = employeeBiometric.UserName;
            string tPassword = employeeBiometric.Password;
            int tPrivilege = (int)employeeBiometric.Privilege;
            bool tEnabled = employeeBiometric.Enabled;
            int tFingerIndex = employeeBiometric.FingerprintIndex;
            string tTmpData = employeeBiometric.FingerprintTemplate;
            int tFlag = 1;

            if (myCZKEMClass.SSR_SetUserInfo(tMachineNo, tEnrollNo, tName, tPassword, tPrivilege, tEnabled))
            {
                myCZKEMClass.SetUserTmpExStr(tMachineNo, tEnrollNo, tFingerIndex, tFlag, tTmpData);
            }
        }

        myCZKEMClass.RefreshData(param.Terminal.DeviceId);
        myCZKEMClass.EnableDevice(param.Terminal.DeviceId, true);
    }

这是我的“终端”课程

public partial class Terminal : XPCustomObject
{
    Guid fOid;
    [Key(AutoGenerate = true), Browsable(false)]
    public Guid Oid
    {
        get { return fOid; }
        set { SetPropertyValue<Guid>("Oid", ref fOid, value); }
    }

    private Branch _Branch;
    [RuleRequiredField("", DefaultContexts.Save, "Branch required")]
    public Branch Branch
    {
        get
        {
            return _Branch;
        }
        set
        {
            SetPropertyValue("Branch", ref _Branch, value);
        }
    }
    string fDescription;
    [RuleUniqueValue("", DefaultContexts.Save, "The value was already registered within the system.", ResultType = ValidationResultType.Warning)]
    [RuleRequiredField("", DefaultContexts.Save, "Description required")]
    public string Description
    {
        get { return fDescription; }
        set { SetPropertyValue<string>("Description", ref fDescription, value); }
    }
    string fIPAddress;
    [Size(15)]
    public string IPAddress
    {
        get { return fIPAddress; }
        set { SetPropertyValue<string>("IPAddress", ref fIPAddress, value); }
    }

    private int _Port;
    public int Port
    {
        get
        {
            return _Port;
        }
        set
        {
            SetPropertyValue("Port", ref _Port, value);
        }
    }

    string fDeviceDescription;

    public string DeviceDescription
    {
        get { return fDeviceDescription; }
        set { SetPropertyValue<string>("DeviceDescription", ref fDeviceDescription, value); }
    }

    private int _DeviceId;
    public int DeviceId
    {
        get
        {
            return _DeviceId;
        }
        set
        {
            SetPropertyValue("DeviceId", ref _DeviceId, value);
        }
    }

    private bool _Disabled;
    public bool Disabled
    {
        get
        {
            return _Disabled;
        }
        set
        {
            SetPropertyValue("Disabled", ref _Disabled, value);
        }
    }}
于 2015-09-08T13:32:40.770 回答
0

将 FP 读取为字符串并将相同的字符串推送到生物识别设备,无需任何压缩或转换。

于 2014-09-26T04:30:23.230 回答