private void FingerPrint_Captured(object sender, CapturedEventArgs e) { this.Invoke((Action)(() => { this.toolStripStatusLabel1.Text = e.Score.ToString(); if (string.IsNullOrEmpty(e.ErrorInfo) == false) { Console.Beep(); } else { Speak("很好"); SendKeys.SendWait(e.Text + "\r"); } })); }
// parameters: // template_buffer 指纹模板数据 // length template_buffer 数组内有效数据长度 void ProcessCaptureData( byte[] image_buffer, byte[] template_buffer, int length) { if (this.HasImageReady()) { Task.Run(() => { MemoryStream ms = new MemoryStream(); BitmapFormat.GetBitmap(image_buffer, _captureData.mfpWidth, _captureData.mfpHeight, ref ms); TriggerImageReady(null, new ImageReadyEventArgs { Image = new Bitmap(ms) }); }); } if (_mode == "register") { // 查重 { int id = 0, score = 0; int ret = zkfp2.DBIdentify(_dBHandle, template_buffer, ref id, ref score); if (zkfp.ZKFP_ERR_OK == ret) { // 根据 id 取出 barcode 字符串 string strBarcode = (string)_id_barcode_table[id.ToString()]; if (_exclude.IndexOf(strBarcode) == -1) { Speaking($"您的指纹以前已经被 {strBarcode} 注册过了(id={id}),无法重复注册"); return; } } } // 和上一次的比对 if (_register_template_list.Count > 0) { int nRet = zkfp2.DBMatch(_dBHandle, template_buffer, _register_template_list[_register_template_list.Count - 1]); if (nRet <= 0) { _register_template_list.Clear(); // 从头来 Light("red"); Speaking("刚扫入的指纹质量不佳,请继续重新扫入"); return; } } { byte[] buffer = new byte[length]; Array.Copy(template_buffer, buffer, length); _register_template_list.Add(buffer); } if (_register_template_list.Count >= 3) { Light("green"); // 结束 register 轮回 _eventRegisterFinished.Set(); return; } Light("green"); Speaking("很好。还需要扫入 " + (3 - _register_template_list.Count) + " 个指纹"); return; } { int ret = zkfp.ZKFP_ERR_OK; int fid = 0, score = 0; ret = zkfp2.DBIdentify(_dBHandle, template_buffer, ref fid, ref score); Debug.WriteLine(string.Format("ret={0}, fid={1}, score={2}", ret, fid, score)); if (score >= _shreshold // zkfp.ZKFP_ERR_OK == ret ) { //textRes.Text = "Identify succ, fid= " + fid + ",score=" + score + "!"; //return; // 根据 id 取出 barcode 字符串,然后发送给当前焦点 textbox string strBarcode = (string)_id_barcode_table[fid.ToString()]; //SafeBeep(1); CapturedEventArgs e1 = new CapturedEventArgs { Text = strBarcode, Score = score }; Light("green"); TriggerCaptured(null, e1); // SendKeys.SendWait(strBarcode + "\r"); //if (this.BeepOn == false) // Speak("很好"); // 闪绿灯 //SafeLight("green"); } else { //textRes.Text = "Identify fail, ret= " + ret; //return; CapturedEventArgs e1 = new CapturedEventArgs { Score = score, ErrorInfo = $"无法识别, 错误码={ret}" }; Light("red"); TriggerCaptured(null, e1); } } }
// parameters: // template_buffer 指纹模板数据 // length template_buffer 数组内有效数据长度 static void ProcessCaptureData( byte[] image_buffer, byte[] template_buffer, int length) { if (ImageReady != null) { Task.Run(() => { MemoryStream ms = new MemoryStream(); BitmapFormat.GetBitmap(image_buffer, _captureData.mfpWidth, _captureData.mfpHeight, ref ms); ImageReady(null, new ImageReadyEventArgs { Image = new Bitmap(ms) }); }); } if (_mode == "register") { #if NO // 查重 { int id = 0, score = 0; int ret = zkfp2.DBIdentify(mDBHandle, template_buffer, ref id, ref score); if (zkfp.ZKFP_ERR_OK == ret) { // TODO: 需要把 id 翻译为号码字符串显示 Speaking("您的指纹以前已经注册过了(id=" + id + "),无法重复注册"); return; } } #endif // 和上一次的比对 if (_register_template_list.Count > 0) { int nRet = zkfp2.DBMatch(_dBHandle, template_buffer, _register_template_list[_register_template_list.Count - 1]); if (nRet <= 0) { Speaking("刚扫入的指纹质量不佳,请继续重新扫入"); return; } } { byte[] buffer = new byte[length]; Array.Copy(template_buffer, buffer, length); _register_template_list.Add(buffer); } if (_register_template_list.Count >= 3) { // 结束 register 轮回 _eventRegisterFinished.Set(); return; } Speaking("很好。还需要扫入 " + (3 - _register_template_list.Count) + " 个指纹"); return; } { int ret = zkfp.ZKFP_ERR_OK; int fid = 0, score = 0; ret = zkfp2.DBIdentify(_dBHandle, template_buffer, ref fid, ref score); if (zkfp.ZKFP_ERR_OK == ret) { //textRes.Text = "Identify succ, fid= " + fid + ",score=" + score + "!"; //return; // 根据 id 取出 barcode 字符串,然后发送给当前焦点 textbox string strBarcode = (string)_id_barcode_table[fid.ToString()]; //SafeBeep(1); CapturedEventArgs e1 = new CapturedEventArgs { Text = strBarcode, Score = score }; Captured(null, e1); // SendKeys.SendWait(strBarcode + "\r"); //if (this.BeepOn == false) // Speak("很好"); // 闪绿灯 //SafeLight("green"); } else { //textRes.Text = "Identify fail, ret= " + ret; //return; CapturedEventArgs e1 = new CapturedEventArgs { ErrorInfo = "Identify fail, ret= " + ret }; Captured(null, e1); } } }