189 lines
5.9 KiB
C#
189 lines
5.9 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using IKapC.NET;
|
||
using IKapBoardClassLibrary;
|
||
namespace LeatherApp.Device.CamerUtil
|
||
{
|
||
public class IKDevice
|
||
{
|
||
// 相机句柄
|
||
public IntPtr m_pDev = new IntPtr(-1);
|
||
// 采集卡句柄
|
||
public IntPtr m_pBoard = new IntPtr(-1);
|
||
// 用户缓冲区,用于图像数据转换
|
||
public IntPtr m_pUserBuffer = new IntPtr(-1);
|
||
// 是否正在采集
|
||
public volatile bool m_bGrabingImage = false;
|
||
// 是否已更新用户缓冲区
|
||
public volatile bool m_bUpdateImage = false;
|
||
// 相机类型,0为GV相机,1为CL相机,2为CXP相机
|
||
public int m_nType = -1;
|
||
// 图像宽度
|
||
public int m_nWidth = -1;
|
||
// 图像高度
|
||
public int m_nHeight = -1;
|
||
// 像素位数
|
||
public int m_nDepth = 8;
|
||
// 图像通道数
|
||
public int m_nChannels = 1;
|
||
// 相机索引
|
||
public int m_nDevIndex = -1;
|
||
// 采集卡索引
|
||
public int m_nBoardIndex = -1;
|
||
// 相机缓冲区个数
|
||
public int m_nFrameCount = 2;
|
||
// 当前帧索引
|
||
public int m_nCurFrameIndex = 0;
|
||
// 相机缓冲区大小
|
||
public int m_nBufferSize = 0;
|
||
// 用户缓冲区锁
|
||
public object m_mutexImage = new object();
|
||
|
||
/*
|
||
*@brief:根据索引开启设备
|
||
*@param [in] nDevIndex:相机索引
|
||
*@param [in] nBoardIndex:采集卡索引
|
||
*@return:是否开启成功
|
||
*/
|
||
public virtual bool openDevice(int nDevIndex, int nBoardIndex)
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/*
|
||
*@brief:关闭相机
|
||
*@param [in]:
|
||
*@return:是否关闭成功
|
||
*/
|
||
public virtual bool closeDevice()
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/*
|
||
*@brief:查询设备连接状态
|
||
*@param [in]:
|
||
*@return:是否连接
|
||
*/
|
||
public virtual bool isOpen()
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/*
|
||
*@brief:加载采集卡配置文件
|
||
*@param [in] sFilePath:配置文件路径
|
||
*@return:是否加载成功
|
||
*/
|
||
public virtual bool loadConfiguration(string sFilePath)
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/*
|
||
* @brief:申请缓冲区资源
|
||
* @return:是否申请成功
|
||
*/
|
||
public virtual bool createBuffer()
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/*
|
||
* @brief:清除已申请缓冲区资源
|
||
* @return:
|
||
*/
|
||
public virtual void clearBuffer()
|
||
{
|
||
}
|
||
|
||
/*
|
||
*@brief:开始采集
|
||
*@param [in] nCount:采集帧数
|
||
*@return:是否开始采集
|
||
*/
|
||
public virtual bool startGrab(int nCount)
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/*
|
||
*@brief:停止采集
|
||
*@param [in]:
|
||
*@return:是否停止采集
|
||
*/
|
||
public virtual bool stopGrab()
|
||
{
|
||
return false;
|
||
}
|
||
|
||
/*
|
||
* @brief:设置相机特征值
|
||
* @param [in] featureName:特征名
|
||
* @param [in] featureValue:特征值
|
||
* @return: 是否设置成功
|
||
*/
|
||
public bool setFeatureValue(string featureName, string featureValue)
|
||
{
|
||
IntPtr itkFeature = new IntPtr(-1);
|
||
uint nType = 0;
|
||
uint res = IKapCLib.ItkDevAllocFeature(m_pDev, featureName, ref itkFeature);
|
||
if (!Check(res))
|
||
{
|
||
System.Diagnostics.Debug.WriteLine("Camera error:Allocate feature failed");
|
||
return false;
|
||
}
|
||
res = IKapCLib.ItkFeatureGetType(itkFeature, ref nType);
|
||
if (!Check(res))
|
||
{
|
||
System.Diagnostics.Debug.WriteLine("Camera error:Get feature type failed");
|
||
return false;
|
||
}
|
||
switch (nType)
|
||
{
|
||
case (uint)ItkFeatureType.ITKFEATURE_VAL_TYPE_INT32:
|
||
res = IKapCLib.ItkFeatureSetInt32(itkFeature, Convert.ToInt32(featureValue));
|
||
break;
|
||
case (uint)ItkFeatureType.ITKFEATURE_VAL_TYPE_INT64:
|
||
res = IKapCLib.ItkFeatureSetInt64(itkFeature, Convert.ToInt64(featureValue));
|
||
break;
|
||
case (uint)ItkFeatureType.ITKFEATURE_VAL_TYPE_FLOAT:
|
||
case (uint)ItkFeatureType.ITKFEATURE_VAL_TYPE_DOUBLE:
|
||
res = IKapCLib.ItkFeatureSetDouble(itkFeature, Convert.ToDouble(featureValue));
|
||
break;
|
||
case (uint)ItkFeatureType.ITKFEATURE_VAL_TYPE_ENUM:
|
||
case (uint)ItkFeatureType.ITKFEATURE_VAL_TYPE_STRING:
|
||
res = IKapCLib.ItkFeatureFromString(itkFeature, featureValue);
|
||
break;
|
||
case (uint)ItkFeatureType.ITKFEATURE_VAL_TYPE_COMMAND:
|
||
res = IKapCLib.ItkFeatureExecuteCommand(itkFeature);
|
||
break;
|
||
}
|
||
if (!Check(res))
|
||
{
|
||
System.Diagnostics.Debug.WriteLine("Camera error:Set feature failed");
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
/*
|
||
*@brief:检查错误码
|
||
*@param [in] err:错误码
|
||
*@return:是否错误
|
||
*/
|
||
public static bool Check(uint err)
|
||
{
|
||
if (err != (uint)ItkStatusErrorId.ITKSTATUS_OK)
|
||
{
|
||
System.Diagnostics.Debug.WriteLine("Error code: {0}.\n", err.ToString("x8"));
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
}
|