包含海康相机与大恒相机二次封装
使用示例:
MCamera_hk hk1;
private void Form1_Load(object sender, EventArgs e)
{
hk1 = new MCamera_hk(_process, 1);
hk1.OpenOneCameraByUserName("xxxx");
hk1.SetTriggerMode(1);
hk1.SetCallBack();
hk1.StartGetStream();
}
public void _process(Bitmap image)
{
pictureBox1.Image = image;
}
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using MvCamCtrl.NET;
using MvCamCtrl.NET.CameraParams;
using GxIAPINET;
namespace Camera
{
public class MCamera_hk
{
private void ImageCallbackFunc(IntPtr pData, ref MV_FRAME_OUT_INFO_EX pFrameInfo, IntPtr pUser)
{
Console.WriteLine("Get one frame: Width[" + Convert.ToString(pFrameInfo.nWidth) + "] , Height[" + Convert.ToString(pFrameInfo.nHeight)
+ "] , FrameNum[" + Convert.ToString(pFrameInfo.nFrameNum) + "]");
int width = pFrameInfo.nWidth;
int height = pFrameInfo.nHeight;
byte[] SrcData = new byte[pFrameInfo.nHeight * pFrameInfo.nWidth * channel];
Marshal.Copy(pData, SrcData, 0, SrcData.Length);
Bitmap b = getBitmapFromByteStream(SrcData, height, width, channel);
process(b);
}
#region 变量
public CCamera hik = new CCamera();
private int nRet = CErrorDefine.MV_OK;
bool m_bIsDeviceOpen = false;
public bool m_bGrabbing = false;
private cbOutputExdelegate ImageCallback;
Action<Bitmap> process;
int channel;
#endregion
#region 对外接口
public MCamera_hk(Action<Bitmap> pro, int ch)
{
process = pro;
channel = ch;
}
public bool OpenOneCameraByIP(string str)
{
List<CCameraInfo> ltDeviceList = new List<CCameraInfo>();
GetDeviceList(ref ltDeviceList);
for (int i = 0; i < ltDeviceList.Count; i++)
{
int nDevIndex = i;
CGigECameraInfo cGigEDeviceInfo = (CGigECameraInfo)ltDeviceList[i];
uint nIp1 = ((cGigEDeviceInfo.nCurrentIp & 0xff000000) >> 24);
uint nIp2 = ((cGigEDeviceInfo.nCurrentIp & 0x00ff0000) >> 16);
uint nIp3 = ((cGigEDeviceInfo.nCurrentIp & 0x0000ff00) >> 8);
uint nIp4 = (cGigEDeviceInfo.nCurrentIp & 0x000000ff);
string ss = nIp1 + "." + nIp2 + "." + nIp3 + "." + nIp4;
if (ss == str)
{
CCameraInfo stDevice = ltDeviceList[nDevIndex];
nRet = hik.CreateHandle(ref stDevice);
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Create device failed:{0:x8}", nRet);
return false;
}
nRet = hik.OpenDevice();
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Open device failed:{0:x8}", nRet);
return false;
}
m_bIsDeviceOpen = true;
if (stDevice.nTLayerType == CSystem.MV_GIGE_DEVICE)
{
int nPacketSize = hik.GIGE_GetOptimalPacketSize();
if (nPacketSize > 0)
{
nRet = hik.SetIntValue("GevSCPSPacketSize", (uint)nPacketSize);
if (nRet != CErrorDefine.MV_OK)
{
Console.WriteLine("Set Packet Size failed!");
}
}
}
}
}
return true;
}
public bool OpenOneCameraByUserName(string str)
{
List<CCameraInfo> ltDeviceList = new List<CCameraInfo>();
GetDeviceList(ref ltDeviceList);
for (int i = 0; i < ltDeviceList.Count; i++)
{
int nDevIndex = i;
CGigECameraInfo cGigEDeviceInfo = (CGigECameraInfo)ltDeviceList[i];
string ss = cGigEDeviceInfo.UserDefinedName;
if (ss == str)
{
CCameraInfo stDevice = ltDeviceList[nDevIndex];
nRet = hik.CreateHandle(ref stDevice);
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Create device failed:{0:x8}", nRet);
return false;
}
nRet = hik.OpenDevice();
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Open device failed:{0:x8}", nRet);
return false;
}
m_bIsDeviceOpen = true;
}
}
return true;
}
public bool SetTriggerMode(int index)
{
if (index == 0)
{
nRet = hik.SetEnumValue("TriggerMode", (uint)MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_OFF);
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Set TriggerMode failed:{0:x8}", nRet);
return false;
}
}
else if (index == 1)
{
nRet = hik.SetEnumValue("TriggerMode", (uint)MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Set TriggerMode failed:{0:x8}", nRet);
return false;
}
hik.SetEnumValue("TriggerSource", (uint)MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE);
}
else if (index == 2)
{
nRet = hik.SetEnumValue("TriggerMode", (uint)MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Set TriggerMode failed:{0:x8}", nRet);
return false;
}
hik.SetEnumValue("TriggerSource", (uint)MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0);
}
return true;
}
public bool OneSoftTrigger()
{
int nRet = hik.SetCommandValue("TriggerSoftware");
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Trigger Software Fail!");
return false;
}
Console.WriteLine("Trigger One Time!");
return true;
}
public bool SetCallBack()
{
ImageCallback = new cbOutputExdelegate(ImageCallbackFunc);
nRet = hik.RegisterImageCallBackEx(ImageCallback, IntPtr.Zero);
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Register image callback failed!");
return false;
}
return true;
}
public bool StartGetStream()
{
int nRet = NecessaryOperBeforeGrab();
if (CErrorDefine.MV_OK != nRet)
{
return false;
}
nRet = hik.StartGrabbing();
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Start grabbing failed:{0:x8}", nRet);
return false;
}
m_bGrabbing = true;
return true;
}
public bool CloseCamera()
{
if (true == m_bIsDeviceOpen)
{
nRet = hik.CloseDevice();
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Close device failed:{0:x8}", nRet);
return false;
}
}
m_bGrabbing = false;
nRet = hik.DestroyHandle();
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Destroy device failed:{0:x8}", nRet);
return false;
}
m_bIsDeviceOpen = false;
Console.WriteLine("Camera offline!");
return true;
}
#endregion
#region 私有方法
private bool GetDeviceList(ref List<CCameraInfo> ltDeviceList)
{
nRet = CSystem.EnumDevices(CSystem.MV_GIGE_DEVICE | CSystem.MV_USB_DEVICE, ref ltDeviceList);
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Enum device failed:{0:x8}", nRet);
return false;
}
Console.WriteLine("Enum device count : " + Convert.ToString(ltDeviceList.Count));
if (0 == ltDeviceList.Count)
{
return false;
}
return true;
}
PixelFormat m_enBitmapPixelFormat = PixelFormat.DontCare;
public Bitmap m_pcBitmap = null;
private Int32 NecessaryOperBeforeGrab()
{
CIntValue pcWidth = new CIntValue();
int nRet = hik.GetIntValue("Width", ref pcWidth);
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Get Width Info Fail!");
return nRet;
}
CIntValue pcHeight = new CIntValue();
nRet = hik.GetIntValue("Height", ref pcHeight);
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Get Height Info Fail!");
return nRet;
}
CEnumValue m_pcPixelFormat = new CEnumValue();
nRet = hik.GetEnumValue("PixelFormat", ref m_pcPixelFormat);
if (CErrorDefine.MV_OK != nRet)
{
Console.WriteLine("Get Pixel Format Fail!");
return nRet;
}
if ((Int32)MvGvspPixelType.PixelType_Gvsp_Undefined == (Int32)m_pcPixelFormat.CurValue)
{
Console.WriteLine("Unknown Pixel Format!");
return CErrorDefine.MV_E_UNKNOW;
}
else if (IsMonoData((MvGvspPixelType)m_pcPixelFormat.CurValue))
{
m_enBitmapPixelFormat = PixelFormat.Format8bppIndexed;
}
else
{
m_enBitmapPixelFormat = PixelFormat.Format24bppRgb;
}
if (null != m_pcBitmap)
{
m_pcBitmap.Dispose();
m_pcBitmap = null;
}
m_pcBitmap = new Bitmap((Int32)pcWidth.CurValue, (Int32)pcHeight.CurValue, m_enBitmapPixelFormat);
if (PixelFormat.Format8bppIndexed == m_enBitmapPixelFormat)
{
ColorPalette palette = m_pcBitmap.Palette;
for (int i = 0; i < palette.Entries.Length; i++)
{
palette.Entries[i] = Color.FromArgb(i, i, i);
}
m_pcBitmap.Palette = palette;
}
return CErrorDefine.MV_OK;
}
private Boolean IsMonoData(MvGvspPixelType enGvspPixelType)
{
switch (enGvspPixelType)
{
case MvGvspPixelType.PixelType_Gvsp_Mono8:
case MvGvspPixelType.PixelType_Gvsp_Mono10:
case MvGvspPixelType.PixelType_Gvsp_Mono10_Packed:
case MvGvspPixelType.PixelType_Gvsp_Mono12:
case MvGvspPixelType.PixelType_Gvsp_Mono12_Packed:
return true;
default:
return false;
}
}
private Boolean IsColorData(MvGvspPixelType enGvspPixelType)
{
switch (enGvspPixelType)
{
case MvGvspPixelType.PixelType_Gvsp_BayerGR8:
case MvGvspPixelType.PixelType_Gvsp_BayerRG8:
case MvGvspPixelType.PixelType_Gvsp_BayerGB8:
case MvGvspPixelType.PixelType_Gvsp_BayerBG8:
case MvGvspPixelType.PixelType_Gvsp_BayerGR10:
case MvGvspPixelType.PixelType_Gvsp_BayerRG10:
case MvGvspPixelType.PixelType_Gvsp_BayerGB10:
case MvGvspPixelType.PixelType_Gvsp_BayerBG10:
case MvGvspPixelType.PixelType_Gvsp_BayerGR12:
case MvGvspPixelType.PixelType_Gvsp_BayerRG12:
case MvGvspPixelType.PixelType_Gvsp_BayerGB12:
case MvGvspPixelType.PixelType_Gvsp_BayerBG12:
case MvGvspPixelType.PixelType_Gvsp_BayerGR10_Packed:
case MvGvspPixelType.PixelType_Gvsp_BayerRG10_Packed:
case MvGvspPixelType.PixelType_Gvsp_BayerGB10_Packed:
case MvGvspPixelType.PixelType_Gvsp_BayerBG10_Packed:
case MvGvspPixelType.PixelType_Gvsp_BayerGR12_Packed:
case MvGvspPixelType.PixelType_Gvsp_BayerRG12_Packed:
case MvGvspPixelType.PixelType_Gvsp_BayerGB12_Packed:
case MvGvspPixelType.PixelType_Gvsp_BayerBG12_Packed:
case MvGvspPixelType.PixelType_Gvsp_RGB8_Packed:
case MvGvspPixelType.PixelType_Gvsp_YUV422_Packed:
case MvGvspPixelType.PixelType_Gvsp_YUV422_YUYV_Packed:
return true;
default:
return false;
}
}
private Bitmap getBitmapFromByteStream(byte[] imgByte, int imgH, int imgW, int channel)
{
Bitmap bitmap = null;
if (channel == 3)
{
bitmap = new Bitmap(imgW, imgH, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
}
else if (channel == 1)
{
bitmap = new Bitmap(imgW, imgH, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
}
else if (channel == 4)
{
bitmap = new Bitmap(imgW, imgH, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
}
else
{
return bitmap;
}
BitmapData bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, imgW, imgH), ImageLockMode.WriteOnly, bitmap.PixelFormat);
int stride = bitmapData.Stride;
int offset = stride - imgW * channel;
IntPtr iptr = bitmapData.Scan0;
int scanbytes = stride * imgH;
int posScan = 0, posReal = 0;
byte[] pixelvalues = new byte[scanbytes];
if (0 != offset)
{
for (int x = 0; x < imgH; x++)
{
for (int y = 0; y < imgW * channel; y++)
{
pixelvalues[posScan++] = imgByte[posReal++];
}
posScan += offset;
}
Marshal.Copy(pixelvalues, 0, iptr, scanbytes);
}
else
{
Marshal.Copy(imgByte, 0, iptr, scanbytes);
}
bitmap.UnlockBits(bitmapData);
if (channel == 1)
{
var pal = bitmap.Palette;
for (int j = 0; j < 256; j++)
pal.Entries[j] = System.Drawing.Color.FromArgb(j, j, j);
bitmap.Palette = pal;
}
return bitmap;
}
#endregion
}
public class MCamera_daheng
{
private void ImageCallbackFunc(object objUserParam, IFrameData objIFrameData)
{
Console.WriteLine(SN + " 回调触发");
if (m_bIsColor)
{
GX_VALID_BIT_LIST emValidBits = GX_VALID_BIT_LIST.GX_BIT_0_7;
emValidBits = __GetBestValudBit(objIFrameData.GetPixelFormat());
IntPtr pBufferColor = objIFrameData.ConvertToRGB24(emValidBits, GX_BAYER_CONVERT_TYPE_LIST.GX_RAW2RGB_NEIGHBOUR, false);
CameraData = new Bitmap((int)objIFrameData.GetWidth(), (int)objIFrameData.GetHeight(), (int)objIFrameData.GetWidth() * 3, System.Drawing.Imaging.PixelFormat.Format24bppRgb, pBufferColor);
}
else
{
CameraData = new Bitmap((int)objIFrameData.GetWidth(), (int)objIFrameData.GetHeight(), (int)objIFrameData.GetWidth(), System.Drawing.Imaging.PixelFormat.Format8bppIndexed, objIFrameData.GetBuffer());
ColorPalette palette;
palette = CameraData.Palette;
int i = 0;
for (i = 0; i <= 255; i++)
{
palette.Entries[i] = System.Drawing.Color.FromArgb(i, i, i);
}
CameraData.Palette = palette;
}
process(CameraData);
}
#region 变量
Action<Bitmap> process;
int channel;
string SN;
static List<IGXDeviceInfo> listGXDeviceInfo;
static IGXFactory m_objIGXFactory = null;
IGXDevice m_objIGXDevice = null;
IGXStream m_objIGXStream = null;
IGXFeatureControl m_objIGXFeatureControl = null;
IGXFeatureControl m_objIGXStreamFeatureControl = null;
bool m_bIsOpen = false;
bool m_bIsSnap = false;
int m_nPayloadSize = 0;
int CamIndex = 0;
Bitmap CameraData;
static int OutCamIndex = 0;
public delegate void OutPutData(int index, Bitmap objdata);
OutPutData inPutFunc;
bool m_isStartGrab = false;
public bool m_bIsColor = false;
#endregion
#region 对外接口
public MCamera_daheng(Action<Bitmap> pro, int chan)
{
IGXFactory.GetInstance().Init();
process = pro;
channel = chan;
}
public bool OpenOneCameraBySN(string str)
{
List<IGXDeviceInfo> listGXDeviceInfo = new List<IGXDeviceInfo>();
IGXFactory.GetInstance().UpdateAllDeviceList(200, listGXDeviceInfo);
Console.WriteLine("当前设备个数:" + listGXDeviceInfo.Count);
if (listGXDeviceInfo.Count <= 0)
{
Console.WriteLine("未发现设备");
return false;
}
int i;
for (i = 0; i < listGXDeviceInfo.Count; i++)
{
string s = listGXDeviceInfo[i].GetSN();
if (s == str)
{
break;
}
}
if (i >= listGXDeviceInfo.Count)
{
Console.WriteLine("未找到与所输SN对应的设备");
return false;
}
SN = str;
m_objIGXDevice = IGXFactory.GetInstance().OpenDeviceBySN(str, GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE);
m_objIGXFeatureControl = m_objIGXDevice.GetRemoteFeatureControl();
if (null != m_objIGXDevice)
{
m_objIGXStream = m_objIGXDevice.OpenStream(0);
m_objIGXStreamFeatureControl = m_objIGXStream.GetFeatureControl();
}
m_nPayloadSize = (int)m_objIGXDevice.GetRemoteFeatureControl().GetIntFeature("PayloadSize").GetValue();
string strValue = null;
if (m_objIGXDevice.GetRemoteFeatureControl().IsImplemented("PixelColorFilter"))
{
strValue = m_objIGXDevice.GetRemoteFeatureControl().GetEnumFeature("PixelColorFilter").GetValue();
if ("None" != strValue)
{
m_bIsColor = true;
}
}
GX_DEVICE_CLASS_LIST objDeviceClass = m_objIGXDevice.GetDeviceInfo().GetDeviceClass();
if (GX_DEVICE_CLASS_LIST.GX_DEVICE_CLASS_GEV == objDeviceClass)
{
if (true == m_objIGXFeatureControl.IsImplemented("GevSCPSPacketSize"))
{
uint nPacketSize = m_objIGXStream.GetOptimalPacketSize();
m_objIGXFeatureControl.GetIntFeature("GevSCPSPacketSize").SetValue(nPacketSize);
}
}
m_bIsOpen = true;
Console.WriteLine(SN + " 设置打开成功");
return true;
}
public bool OpenOneCameraByIP(string str)
{
List<IGXDeviceInfo> listGXDeviceInfo = new List<IGXDeviceInfo>();
IGXFactory.GetInstance().UpdateAllDeviceList(200, listGXDeviceInfo);
Console.WriteLine("当前设备个数:" + listGXDeviceInfo.Count);
if (listGXDeviceInfo.Count <= 0)
{
Console.WriteLine("未发现设备");
return false;
}
m_objIGXDevice = IGXFactory.GetInstance().OpenDeviceByIP(str, GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE);
m_objIGXFeatureControl = m_objIGXDevice.GetRemoteFeatureControl();
if (null != m_objIGXDevice)
{
m_objIGXStream = m_objIGXDevice.OpenStream(0);
}
m_nPayloadSize = (int)m_objIGXDevice.GetRemoteFeatureControl().GetIntFeature("PayloadSize").GetValue();
string strValue = null;
if (m_objIGXDevice.GetRemoteFeatureControl().IsImplemented("PixelColorFilter"))
{
strValue = m_objIGXDevice.GetRemoteFeatureControl().GetEnumFeature("PixelColorFilter").GetValue();
if ("None" != strValue)
{
m_bIsColor = true;
}
}
m_bIsOpen = true;
return true;
}
public bool OpenOneCameraByMAC(string str)
{
List<IGXDeviceInfo> listGXDeviceInfo = new List<IGXDeviceInfo>();
IGXFactory.GetInstance().UpdateAllDeviceList(200, listGXDeviceInfo);
Console.WriteLine("当前设备个数:" + listGXDeviceInfo.Count);
if (listGXDeviceInfo.Count <= 0)
{
Console.WriteLine("未发现设备");
return false;
}
m_objIGXDevice = IGXFactory.GetInstance().OpenDeviceByMAC(str, GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE);
m_objIGXFeatureControl = m_objIGXDevice.GetRemoteFeatureControl();
if (null != m_objIGXDevice)
{
m_objIGXStream = m_objIGXDevice.OpenStream(0);
}
m_nPayloadSize = (int)m_objIGXDevice.GetRemoteFeatureControl().GetIntFeature("PayloadSize").GetValue();
string strValue = null;
if (m_objIGXDevice.GetRemoteFeatureControl().IsImplemented("PixelColorFilter"))
{
strValue = m_objIGXDevice.GetRemoteFeatureControl().GetEnumFeature("PixelColorFilter").GetValue();
if ("None" != strValue)
{
m_bIsColor = true;
}
}
m_bIsOpen = true;
return true;
}
public bool SetExposureTime(double exp)
{
if (null != m_objIGXFeatureControl)
{
double dMin, dMax;
dMin = m_objIGXFeatureControl.GetFloatFeature("ExposureTime").GetMin();
dMax = m_objIGXFeatureControl.GetFloatFeature("ExposureTime").GetMax();
if (exp > dMax)
{
exp = dMax;
Console.WriteLine(SN + " 所设曝光大于最大值 已设为最大值" + dMax);
}
if (exp < dMin)
{
exp = dMin;
Console.WriteLine(SN + " 所设曝光小于最小值 已设为最大值" + dMin);
}
m_objIGXFeatureControl.GetFloatFeature("ExposureTime").SetValue(exp);
Console.WriteLine(SN + " 设置曝光成功");
return true;
}
Console.WriteLine(SN + " 设置曝光失败");
return false;
}
public bool SetGain(double gain)
{
if (null != m_objIGXFeatureControl)
{
double dMin, dMax;
dMin = m_objIGXFeatureControl.GetFloatFeature("Gain").GetMin();
dMax = m_objIGXFeatureControl.GetFloatFeature("Gain").GetMax();
if (gain > dMax)
{
gain = dMax;
Console.WriteLine(SN + " 所设增益大于最大值 已设为最大值" + dMax);
}
if (gain < dMin)
{
gain = dMin;
Console.WriteLine(SN + " 所设增益大于最大值 已设为最大值" + dMax);
}
m_objIGXFeatureControl.GetFloatFeature("Gain").SetValue(gain);
Console.WriteLine(SN + "设置增益成功");
return true;
}
Console.WriteLine(SN + "设置增益失败");
return false;
}
public bool SetTriggerMode(int index)
{
if (m_objIGXFeatureControl == null)
{
Console.WriteLine("SN输入错误 设置触发失败");
return false;
}
if (index == 0)
{
m_objIGXFeatureControl.GetEnumFeature("TriggerMode").SetValue("Off");
}
else if (index == 1)
{
m_objIGXFeatureControl.GetEnumFeature("TriggerMode").SetValue("On");
m_objIGXFeatureControl.GetEnumFeature("TriggerSource").SetValue("Software");
Console.WriteLine(SN + " 触发模式设置成功!");
}
else if (index == 2)
{
m_objIGXFeatureControl.GetEnumFeature("TriggerMode").SetValue("On");
m_objIGXFeatureControl.GetEnumFeature("TriggerSource").SetValue("Line0");
}
return true;
}
public bool OneSoftTrigger()
{
if (null != m_objIGXFeatureControl)
{
m_objIGXFeatureControl.GetCommandFeature("TriggerSoftware").Execute();
Console.WriteLine(SN + "单次触发成功");
return true;
}
Console.WriteLine(SN + "单次触发失败");
return false;
}
public bool StartGetStream()
{
if (null != m_objIGXStreamFeatureControl)
{
try
{
m_objIGXStreamFeatureControl.GetEnumFeature("StreamBufferHandlingMode").SetValue("OldestFirst");
}
catch (Exception)
{
}
}
if (null != m_objIGXStream)
{
m_objIGXStream.RegisterCaptureCallback(this, ImageCallbackFunc);
m_objIGXStream.StartGrab();
m_isStartGrab = true;
}
if (null != m_objIGXFeatureControl)
{
m_objIGXFeatureControl.GetCommandFeature("AcquisitionStart").Execute();
}
m_bIsSnap = true;
return true;
}
public bool CloseCamera()
{
if (m_bIsSnap)
{
if (null != m_objIGXFeatureControl)
{
m_objIGXFeatureControl.GetCommandFeature("AcquisitionStop").Execute();
m_objIGXFeatureControl = null;
m_objIGXStreamFeatureControl = null;
}
}
m_bIsSnap = false;
Console.WriteLine(SN + " 取流已停止!");
if (null != m_objIGXStream)
{
m_objIGXStream.StopGrab();
m_objIGXStream.UnregisterCaptureCallback();
m_objIGXStream.Close();
m_objIGXStream = null;
}
if (null != m_objIGXDevice)
{
m_objIGXDevice.Close();
m_objIGXDevice = null;
}
Console.WriteLine(SN + " 设备已关闭");
m_bIsOpen = false;
return true;
}
#endregion
#region 私有方法
private GX_VALID_BIT_LIST __GetBestValudBit(GX_PIXEL_FORMAT_ENTRY emPixelFormatEntry)
{
GX_VALID_BIT_LIST emValidBits = GX_VALID_BIT_LIST.GX_BIT_0_7;
switch (emPixelFormatEntry)
{
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO8:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR8:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG8:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB8:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG8:
{
emValidBits = GX_VALID_BIT_LIST.GX_BIT_0_7;
break;
}
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO10:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR10:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG10:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB10:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG10:
{
emValidBits = GX_VALID_BIT_LIST.GX_BIT_2_9;
break;
}
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO12:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR12:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG12:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB12:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG12:
{
emValidBits = GX_VALID_BIT_LIST.GX_BIT_4_11;
break;
}
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO14:
{
break;
}
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_MONO16:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GR16:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_RG16:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_GB16:
case GX_PIXEL_FORMAT_ENTRY.GX_PIXEL_FORMAT_BAYER_BG16:
{
break;
}
default:
break;
}
return emValidBits;
}
#endregion
~MCamera_daheng()
{
IGXFactory.GetInstance().Uninit();
}
}
}