采用网络对联方式交互数据
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

190 lines
9.9 KiB

using AKSWebBrowser.Commen;
using CPF.Controls;
using CPF.Linux;
using CPF.Windows;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
namespace AksWebBrowser.Devices
{
//apt-get install gcc-c++ libstdc++-devel
public class Fingerprint
{
public static int td = -1, pnWidth = 0, pnHeight = 0, init = -1;
public static string callback = string.Empty, FileName = string.Empty;
//开启定时
public static System.Timers.Timer timer = new System.Timers.Timer(500);
public Fingerprint() { }
//读取指纹
public static string LIVESCANFinger(string code)
{
try
{
init = LibFingerprint.LIVESCAN_Init();
if (init == 1)
{
// // Log.Info("初始化指纹成功");
td = LibFingerprint.LIVESCAN_GetChannelCount();
if (td > 0)
{
// // Log.Info("获得采集器通道数量成功");
int pnBright = 254;
int status = LibFingerprint.LIVESCAN_GetBright(td, ref pnBright);
// // Log.Info(" 获得采集器当前的亮度:" + status);
// // Log.Info(" 获得采集器当前的亮度:" + pnBright);
int pnContrast = 254;
status = LibFingerprint.LIVESCAN_GetContrast(td, ref pnContrast);
// // Log.Info(" 获得采集器当前对比度:" + status);
// // Log.Info(" 获得采集器当前对比度:" + pnBright);
int pnWidth = 0, pnHeight = 0;
status = LibFingerprint.LIVESCAN_GetMaxImageSize(td, ref pnWidth, ref pnHeight);
// // Log.Info(" 获得采集器采集图像的宽度、高度的最大值:" + status);
// // Log.Info(" 获得采集器采集图像的宽度、高度的最大值:" + pnWidth + "*" + pnHeight);
byte[] pszDesc = new byte[1024];
status = LibFingerprint.LIVESCAN_GetDesc(pszDesc);
// // Log.Info("获得接口规范的说明:" + status);
// // Log.Info("获得接口规范的说明返回数据:" + Encoding.UTF8.GetString(pszDesc));
MessageBox.Show("转变采集");
string time = DateTime.Now.ToString("yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo);
FileName = "/tmp/" + time + ".bmp";
timer.Stop();
timer.Elapsed += OnTimedEvent;
timer.AutoReset = true;//重复执行
timer.Enabled = true;//启动定时器
}
else
{
// // Log.Info("获得采集器通道数量失败");
}
Task.Run(() =>
{
LibFingerprint.LIVESCAN_Close();
});
}
else
{
// // Log.Info("初始化指纹失败,错误代码:" + init);
}
}
catch (Exception ex)
{
if (init == 1)
{
Task.Run(() =>
{
LibFingerprint.LIVESCAN_Close();
});
}
//Log.Error("读取指纹异常:" + ex.Message);
}
return "";
}
//定时任务
private static void OnTimedEvent(object sender, ElapsedEventArgs e)
{
try
{
int status = LibFingerprint.LIVESCAN_BeginCapture(td);
byte[] pRawData = new byte[pnWidth * pnHeight];
status = LibFingerprint.LIVESCAN_GetFPRawData(td, pRawData);
//status = LibFingerprint.LIVESCAN_GetFPBmpData(td, Encoding.UTF8.GetBytes(FileName));
if (status == 1)
{
// // Log.Info("采集一帧图像:" + Encoding.UTF8.GetString(pRawData));
// // Log.Info("获取指纹成功");
timer.Stop();
// // Log.Info("停止采集");
}
LibFingerprint.LIVESCAN_EndCapture(td);
}
catch (Exception ex)
{
//Log.Error("定时读取指纹异常:" + ex.Message);
timer.Stop();
}
}
}
class LibFingerprint
{
//初始化指纹
[DllImport("libID_FprCap", EntryPoint = "LIVESCAN_Init", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_Init();
//关闭
[DllImport("libID_FprCap", EntryPoint = " LIVESCAN_Close", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_Close();
//获得采集器通道数量
[DllImport("libID_FprCap", EntryPoint = "LIVESCAN_GetChannelCount", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_GetChannelCount();
//设置采集器当前的亮度
[DllImport("libID_FprCap", EntryPoint = "LIVESCAN_SetBright", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_SetBright(int nChannel, int nBright);
//设置采集器当前对比度
[DllImport("libID_FprCap", EntryPoint = "LIVESCAN_SetContrast", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_SetContrast(int nChannel, int nContrast);
//获得采集器当前的亮度
[DllImport("libID_FprCap", EntryPoint = "LIVESCAN_GetBright", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_GetBright(int nChannel, ref int pnBright);
//获得采集器当前对比度
[DllImport("libID_FprCap", EntryPoint = "LIVESCAN_GetContrast", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_GetContrast(int nChannel, ref int pnContrast);
// 获得采集器采集图像的宽度、高度的最大值
[DllImport("libID_FprCap", EntryPoint = "LIVESCAN_GetMaxImageSize", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_GetMaxImageSize(int nChannel, ref int pnWidth, ref int pnHeight);
//获得当前图像的采集位置、宽度和高度
[DllImport("libID_FprCap", EntryPoint = "LIVESCAN_GetCaptWindow", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_GetCaptWindow(int nChannel, ref int pnOriginX, ref int pnOriginY, ref int pnWidth, ref int pnHeight);
//设置当前图像的采集位置、宽度和高度
[DllImport("libID_FprCap", EntryPoint = " LIVESCAN_SetCaptWindow", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_SetCaptWindow(int nChannel, int nOriginX, int nOriginY, int nWidth, int nHeight);
//调用采集器的属性设置对话框
[DllImport("libID_FprCap", EntryPoint = "LIVESCAN_Setup", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_Setup();
//采集器是否支持设置对话框
[DllImport("libID_FprCap", EntryPoint = "LIVESCAN_IsSupportSetup", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_IsSupportSetup();
//准备采集一帧图像
[DllImport("libID_FprCap", EntryPoint = "LIVESCAN_BeginCapture", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_BeginCapture(int nChannel);
//采集一帧图像
[DllImport("libID_FprCap", EntryPoint = " LIVESCAN_GetFPRawData", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_GetFPRawData(int nChannel, byte[] pRawData);
//采集一帧 BMP 格式图像数据
[DllImport("libID_FprCap", EntryPoint = " LIVESCAN_GetFPBmpData", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_GetFPBmpData(int nChannel, byte[] pBmpData);
//结束采集一帧图像
[DllImport("libID_FprCap", EntryPoint = " LIVESCAN_EndCapture", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_EndCapture(int nChannel);
//获得接口规范的说明
[DllImport("libID_FprCap", EntryPoint = " LIVESCAN_GetDesc", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
public static extern int LIVESCAN_GetDesc(byte[] pszDesc);
}
}