public int Close() { if (isOpened) { this.captureCompletedHandler = null; this.captureFingerHandler = null; this.isOpened = false; if (this.threadCaptureFinger != null) { this.threadCaptureFinger.Abort(); } for (int i = 0; i < channels; i++) { IDFprCapDll.LIVESCAN_EndCapture(i); } return(IDFprCapDll.LIVESCAN_Close()); } return(1); }
public int Capture(byte fingerPosCode, int channel = 0, int operTimeout = 30000) { if (channel + 1 > channels) { throw new Exception("Not find target device."); } if (!isOpened) { throw new Exception("Please open device first."); } threadCaptureFinger = new Thread((object arg) => { byte[] imageBuffer = null; int quality = 0; byte[] featureBuffer = null; int tempTimeout = (int)arg; while (tempTimeout >= 0 && isOpened) { byte[] pRawData = null; byte[] pBmpData = null; int result = 0; pRawData = new byte[channelSizeDict[channel]]; pBmpData = new byte[channelSizeDict[channel] + 1078]; IDFprCapDll.LIVESCAN_BeginCapture(channel); result = IDFprCapDll.LIVESCAN_GetFPBmpData(channel, pBmpData); result = IDFprCapDll.LIVESCAN_GetFPRawData(channel, pRawData); if (result == 1) { result = feature.Quality(pRawData); if (result > 0) { quality = result; featureBuffer = new byte[512]; result = feature.Extract(fingerPosCode, pRawData, featureBuffer); } else { SimpleConsole.WriteLine(new Exception(string.Format("get finger quality failed, error code:{0}", result))); } imageBuffer = pBmpData; } else { SimpleConsole.WriteLine(new Exception(string.Format("get finger bmp or fpr failed, error code:{0}", result))); } IDFprCapDll.LIVESCAN_EndCapture(channel); if (pBmpData != null && captureFingerHandler != null) { captureFingerHandler.Invoke(pBmpData); } if (this.captureCompletedHandler != null) { this.captureCompletedHandler.Invoke(imageBuffer, featureBuffer, quality, 0); } pRawData = null; pBmpData = null; GC.Collect();//force } }); threadCaptureFinger.Start(operTimeout); return(1); }