private void bckScanFinger_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker bck = (BackgroundWorker)sender; try { int i; NDeviceManager devMan = new NDeviceManager(NDeviceType.FingerScanner, true, false); int count = devMan.Devices.Count; //See if a fingerprint scanner is connected if (count > 0) { //What if there is more than one scanner } else { GlobalScanStatus = ScanStatus.NoScanner; } if (count > 1) //What if there is more than one scanner. We will use the first detected scanner. for (i = 0; i < count; i++) { NDevice device = devMan.Devices[i]; } i = 0; NFScanner fingerScanner = (NFScanner)devMan.Devices[i]; NFExtractor extractor = new NFExtractor(); NFRecord record; extractor.ReturnedImage = NfeReturnedImage.Binarized; NImage image = null; while (image == null && !bckScanFinger.CancellationPending) { if (bck.CancellationPending) { e.Cancel = true; } else { using ( image = fingerScanner.Capture(5000)) { if (image == null) { GlobalScanStatus = ScanStatus.NoTemplateCreated; } else { NfeExtractionStatus extractionStatus; using (NGrayscaleImage grayscaleImage = image.ToGrayscale()) { if (grayscaleImage.ResolutionIsAspectRatio || grayscaleImage.HorzResolution < 250 || grayscaleImage.VertResolution < 250) { grayscaleImage.HorzResolution = 500; grayscaleImage.VertResolution = 500; grayscaleImage.ResolutionIsAspectRatio = false; } record = extractor.Extract(grayscaleImage, NFPosition.Unknown, NFImpressionType.LiveScanPlain, out extractionStatus); fingerprintImage = (NImage)image.Clone(); fingerprintImage = NImages.GetGrayscaleColorWrapper(fingerprintImage, resultImageMinColor, resultImageMaxColor); } if (extractionStatus == NfeExtractionStatus.TemplateCreated) { GlobalScanStatus = ScanStatus.TemplateCreated; fingerprintTemplate = record; ScannedTemplated = true; bck.ReportProgress(1); } } } } } } catch (Exception ex) { ScanError = ex.Message; } GlobalScanStatus = ScanStatus.Cancelled; }
private void Scanner_ImageScanned(object sender, FPScannerImageScannedEventArgs ea) { //the lock is used to prevent a race condition //if a template is captured, capturing is set to false //a new call to StartCapturing is required in order to get the next template lock (_locker) { if (_isCapturing) { NfeExtractionStatus status; Template template = null; try { NFExtractor extractor = new NFExtractor(); NFRecord record = extractor.Extract(ea.Image, NFPosition.Unknown, NFImpressionType.LiveScanPlain, out status); template = new Template(record.Save(), record.Minutiae.Count); extractor.Dispose(); } catch (Exception ex) { OnTemplateCaptured(new TemplateCapturedEventArgs(template, TemplateCapturedStatus.ExtractorException)); return; } if (status == NfeExtractionStatus.QualityCheckFailed) { OnTemplateCaptured(new TemplateCapturedEventArgs(template, TemplateCapturedStatus.QualityCheckFailed)); return; } if (status == NfeExtractionStatus.TooFewMinutiae) { OnTemplateCaptured(new TemplateCapturedEventArgs(template, TemplateCapturedStatus.MinutiaCountFailed)); return; } OnTemplateCaptured(new TemplateCapturedEventArgs(template, TemplateCapturedStatus.Success)); } } }