Ejemplo n.º 1
0
        /// <summary>
        /// 连续触发模式
        /// </summary>
        /// <returns></returns>
        bool SetContinue()
        {
            try
            {
                int nRet = 0;
#if(SDK)
                if (g_BlCallBack == true)
                {
                    nRet = g_MyCamera.MV_CC_StopGrabbing_NET();
                    g_BlCallBack = false;
                    ImageCallback = null;
                    g_MyCamera.MV_CC_RegisterImageCallBackEx_NET(ImageCallback, IntPtr.Zero);
                    nRet = g_MyCamera.MV_CC_StartGrabbing_NET();
                }
                //连续采集模式
                nRet = g_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode", 0);
                if (MyCamera.MV_OK != nRet)
                {
                    return false;
                }
                return true;
#endif
                return true;
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return false;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Open the camera and hook up image acquisition call back
        /// </summary>
        /// <returns></returns>
        public bool Open()
        {
            // Create
            var ret = _myCamera.MV_CC_CreateDevice_NET(ref _cameraInfo);

            if (ret != 0)
            {
                Log("Unable to create camera");
                return(false);
            }

            // Open
            ret = _myCamera.MV_CC_OpenDevice_NET();
            if (ret != 0)
            {
                _myCamera.MV_CC_DestroyDevice_NET();
                Log("Unable to open camera");
                return(false);
            }

            // Register image acquisition call back
            _imageCallbackDelegate = ImageCallback;
            ret = _myCamera.MV_CC_RegisterImageCallBackEx_NET(_imageCallbackDelegate, IntPtr.Zero);
            if (ret != 0)
            {
                Log("Register image acquisition call back failed");
                _myCamera.MV_CC_DestroyDevice_NET();
                return(false);
            }


            // ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera)
            if (CameraType == CameraType.Gige)
            {
                int optimalSize = _myCamera.MV_CC_GetOptimalPacketSize_NET();
                if (optimalSize > 0)
                {
                    ret = _myCamera.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)optimalSize);
                    if (ret != MyCamera.MV_OK)
                    {
                        Log("Set packet size failed");
                    }
                }
                else
                {
                    Log("Get packet size failed");
                }
            }

            // ch:设置采集连续模式 | en:Set Continues Aquisition Mode
            _myCamera.MV_CC_SetEnumValue_NET("AcquisitionMode",
                                             2);                // ch:工作在连续模式 | en:Acquisition On Continuous Mode  0:SingleFrame单帧 1:MultiFrame多帧  2:Continuous连续
            _myCamera.MV_CC_SetEnumValue_NET("TriggerMode", 0); // ch:连续模式 | en:Continuous      0:Off  1:On

            // Reserve buffer
            _buffer          = new byte[_bufferSize];
            _bufForSaveImage = new byte[_buffSizeForSaveImage];

            return(true);
        }
Ejemplo n.º 3
0
        private void RegisterGrabEvent()
        {
            if ((chooseHIK) && (!chooseBasler))
            {
                if (cameraArr1[0] != null)
                {
                    cbImage1 = new MyCamera.cbOutputExdelegate(ImageCallBack_1);
                    cameraArr1[0].MV_CC_RegisterImageCallBackEx_NET(cbImage1, (IntPtr)0);
                }

                if (cameraArr1[1] != null)
                {
                    cbImage2 = new MyCamera.cbOutputExdelegate(ImageCallBack_2);
                    cameraArr1[1].MV_CC_RegisterImageCallBackEx_NET(cbImage2, (IntPtr)0);
                }
            }
            else if ((chooseBasler) && (!chooseHIK))
            {
                if (cameraArr2[0] != null && true == cameraArr2[0].IsOpen)
                {
                    cameraArr2[0].StreamGrabber.ImageGrabbed += OnImageGrabbed_1;
                }

                if (cameraArr2[1] != null && true == cameraArr2[1].IsOpen)
                {
                    cameraArr2[1].StreamGrabber.ImageGrabbed += OnImageGrabbed_2;
                }
            }
        }
Ejemplo n.º 4
0
        public HikCamera(MyCamera device, MyCamera.MV_IMAGE_BASIC_INFO info)
        {
            _imageCallback = new MyCamera.cbOutputExdelegate(ImageCallbackFunc);
            _handle        = GCHandle.Alloc(this);

            _device = device;
            _info   = info;

            _count     = 0;
            _grabCount = -1;
        }
Ejemplo n.º 5
0
 public HikCamera()
 {
     try
     {
         Image                   = new HImage();
         ImageCallback           = new MyCamera.cbOutputExdelegate(ImageCallbackFunc);
         CameraReconnectCallback = new MyCamera.cbExceptiondelegate(ReconnectCallbackFunc);
     }
     catch (Exception e)
     {
         WriteErrorLog(e.ToString());
     }
 }
Ejemplo n.º 6
0
 public void ResetMember()
 {
     m_pDeviceList       = new MyCamera.MV_CC_DEVICE_INFO_LIST();
     m_bGrabbing         = false;
     m_nCanOpenDeviceNum = 0;
     m_nDevNum           = 0;
     DeviceListAcq();
     m_nFrames        = new int[4];
     cbImage          = new MyCamera.cbOutputExdelegate(ImageCallBack);
     m_bTimerFlag     = false;
     m_bSaveImg       = new bool[4];
     m_hDisplayHandle = new IntPtr[4];
     m_pDeviceInfo    = new MyCamera.MV_CC_DEVICE_INFO[4];
 }
Ejemplo n.º 7
0
 public MultipleDemo()
 {
     InitializeComponent();
     m_pDeviceList       = new MyCamera.MV_CC_DEVICE_INFO_LIST();
     m_bGrabbing         = false;
     m_nCanOpenDeviceNum = 0;
     m_nDevNum           = 0;
     DeviceListAcq();
     m_pMyCamera      = new MyCamera[4];
     m_pDeviceInfo    = new MyCamera.MV_CC_DEVICE_INFO[4];
     m_nFrames        = new int[4];
     cbImage          = new MyCamera.cbOutputExdelegate(ImageCallBack);
     m_bTimerFlag     = false;
     m_bSaveImg       = new bool[4];
     m_hDisplayHandle = new IntPtr[4];
 }
Ejemplo n.º 8
0
        public void HardMode()
        {
            cbImage = new MyCamera.cbOutputExdelegate(HardCapture);
            int nIndex;

            foreach (var item in m_listUserDefinedName)
            {
                nIndex = item.Key;
                m_dicMyCamera[nIndex].MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);
                m_dicMyCamera[nIndex].MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0);
                m_dicMyCamera[nIndex].MV_CC_RegisterImageCallBackEx_NET(cbImage, (IntPtr)nIndex);
            }
            IsContinuesMode = false;
            IsTriggerMode   = false;
            IsHardMode      = true;
        }
Ejemplo n.º 9
0
 public HikCamera(IVisionCameraInfo info) : base(info)
 {
     try
     {
         Image                   = new HImage();
         camera                  = new MyCamera();
         ImageCallback           = new MyCamera.cbOutputExdelegate(ImageCallbackFunc);
         CameraReconnectCallback = new MyCamera.cbExceptiondelegate(ReconnectCallbackFunc);
         if (camera == null)
         {
             WriteErrorLog("It can not recognite the camera of  " + UserID);
         }
     }
     catch (Exception e)
     {
         WriteErrorLog(e.ToString());
     }
 }
Ejemplo n.º 10
0
 public override bool InitialCamera(string _serialNumber)
 {
     index           = Convert.ToInt32(_serialNumber.Split('_')[1]);
     deviceInfo      = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(stDevList.pDeviceInfo[index], typeof(MyCamera.MV_CC_DEVICE_INFO));
     hikvisionCamera = new MyCamera();
     if (hikvisionCamera == null)
     {
         return(false);
     }
     if (hikvisionCamera.MV_CC_CreateDevice_NET(ref deviceInfo) != MyCamera.MV_OK)
     {
         return(false);
     }
     if (hikvisionCamera.MV_CC_OpenDevice_NET() != MyCamera.MV_OK)
     {
         hikvisionCamera.MV_CC_DestroyDevice_NET();
         return(false);
     }
     MyCamera.cbOutputExdelegate ImageCallback = new MyCamera.cbOutputExdelegate(StreamGrabber_ImageGrabber);
     if (hikvisionCamera.MV_CC_RegisterImageCallBackEx_NET(ImageCallback, IntPtr.Zero) != MyCamera.MV_OK)
     {
         return(false);
     }
     if (deviceInfo.nTLayerType == MyCamera.MV_GIGE_DEVICE)//探测网络最佳包大小(只对Gige相机有效)
     {
         int nPacketSize = hikvisionCamera.MV_CC_GetOptimalPacketSize_NET();
         if (nPacketSize > 0)
         {
             if (hikvisionCamera.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize) != MyCamera.MV_OK)
             {
                 return(false);
             }
         }
         else
         {
             return(false);
         }
     }
     return(true);
 }
Ejemplo n.º 11
0
        /// <summary>
        /// 触发模式
        /// </summary>
        bool SetTrigger()
        {
            try
            {
                int nRet = 0;
#if(SDK)
                if (g_BaseParCamera.BlUsingTrigger)//使用软触发
                {
                    //触发模式,触发源
                    nRet = g_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode", 1);
                    nRet = g_MyCamera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)TriggerSource_e);

                    if (!g_BlCallBack
                       && TriggerSource_e != TriggerSourceCamera_enum.Software)//非软触发模式
                    {
                        nRet = g_MyCamera.MV_CC_StopGrabbing_NET();
                        g_BlCallBack = true;
                        ImageCallback = new MyCamera.cbOutputExdelegate(GrabHal_CallBack);
                        nRet = g_MyCamera.MV_CC_RegisterImageCallBackEx_NET(ImageCallback, IntPtr.Zero);

                        nRet = g_MyCamera.MV_CC_StartGrabbing_NET();
                    }
                }

                if (MyCamera.MV_OK != nRet)
                {
                    return false;
                }
                return true;
#endif
                return true;
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return false;
            }
        }
Ejemplo n.º 12
0
        public void TriggerConfiguration()
        {
            // ch:设置采集连续模式 | en:Set Continues Aquisition Mode
            getonecamera.MV_CC_SetEnumValue_NET("AcquisitionMode", 2);
            //set param
            // ch:触发源选择:0 - Line0; | en:Trigger source select:0 - Line0;
            //           1 - Line1;
            //           2 - Line2;
            //           3 - Line3;
            //           4 - Counter;
            //           7 - Software;
            if (TriggerMode == TriggerModes.Continuous)
            {
                nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerMode", 0);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Set TriggerMode failed!");
                }

                nRet = getonecamera.MV_CC_SetTriggerDelay_NET(0);
                if (nRet != MyCamera.MV_OK)
                {
                    Console.WriteLine("Set GainAuto failed!");
                }
            }
            else if (TriggerMode == TriggerModes.Unknow)
            {
                nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerMode", 1);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Set TriggerMode failed!");
                }

                nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerSource", 7);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Set TriggerSource failed!");
                }

                nRet = getonecamera.MV_CC_SetTriggerDelay_NET(0);
                if (nRet != MyCamera.MV_OK)
                {
                    Console.WriteLine("Set GainAuto failed!");
                }
            }
            else if (TriggerMode == TriggerModes.HardWare)
            {
                nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerMode", 1);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Set TriggerMode failed!");
                }
                //           1 - Line1;
                //           2 - Line2;
                //           3 - Line3;
                if (TriggerSource == AqDevice.TriggerSources.Line1)
                {
                    nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerSource", 1);
                    if (MyCamera.MV_OK != nRet)
                    {
                        Console.WriteLine("Set TriggerSource failed!");
                    }
                }
                else if (TriggerSource == AqDevice.TriggerSources.Line2)
                {
                    nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerSource", 2);
                    if (MyCamera.MV_OK != nRet)
                    {
                        Console.WriteLine("Set TriggerSource failed!");
                    }
                }
                else if (TriggerSource == AqDevice.TriggerSources.Line3)
                {
                    nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerSource", 2);
                    if (MyCamera.MV_OK != nRet)
                    {
                        Console.WriteLine("Set TriggerSource failed!");
                    }
                }

                //rising edge
                nRet = getonecamera.MV_CC_SetEnumValue_NET("TriggerActivation", 1);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Set TriggerActivation failed!");
                }

                nRet = getonecamera.MV_CC_SetTriggerDelay_NET(0);
                if (nRet != MyCamera.MV_OK)
                {
                    Console.WriteLine("Set GainAuto failed!");
                }
            }

            // ch:注册回调函数 | en:Register image callback
            ImageCallback = new MyCamera.cbOutputExdelegate(ImageCallbackFunc);
        }
Ejemplo n.º 13
0
        static void Main(string[] args)
        {
            int nRet = MyCamera.MV_OK;

            do
            {
                // ch:枚举设备 | en:Enum device
                MyCamera.MV_CC_DEVICE_INFO_LIST stDevList = new MyCamera.MV_CC_DEVICE_INFO_LIST();
                nRet = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref stDevList);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Enum device failed:{0:x8}", nRet);
                    break;
                }
                Console.WriteLine("Enum device count : " + Convert.ToString(stDevList.nDeviceNum));
                if (0 == stDevList.nDeviceNum)
                {
                    break;
                }

                MyCamera.MV_CC_DEVICE_INFO stDevInfo;                            // 通用设备信息

                // ch:打印设备信息 en:Print device info
                for (Int32 i = 0; i < stDevList.nDeviceNum; i++)
                {
                    stDevInfo = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(stDevList.pDeviceInfo[i], typeof(MyCamera.MV_CC_DEVICE_INFO));

                    if (MyCamera.MV_GIGE_DEVICE == stDevInfo.nTLayerType)
                    {
                        MyCamera.MV_GIGE_DEVICE_INFO stGigEDeviceInfo = (MyCamera.MV_GIGE_DEVICE_INFO)MyCamera.ByteToStruct(stDevInfo.SpecialInfo.stGigEInfo, typeof(MyCamera.MV_GIGE_DEVICE_INFO));
                        uint nIp1 = ((stGigEDeviceInfo.nCurrentIp & 0xff000000) >> 24);
                        uint nIp2 = ((stGigEDeviceInfo.nCurrentIp & 0x00ff0000) >> 16);
                        uint nIp3 = ((stGigEDeviceInfo.nCurrentIp & 0x0000ff00) >> 8);
                        uint nIp4 = (stGigEDeviceInfo.nCurrentIp & 0x000000ff);
                        Console.WriteLine("\n" + i.ToString() + ": [GigE] User Define Name : " + stGigEDeviceInfo.chUserDefinedName);
                        Console.WriteLine("device IP :" + nIp1 + "." + nIp2 + "." + nIp3 + "." + nIp4);
                    }
                    else if (MyCamera.MV_USB_DEVICE == stDevInfo.nTLayerType)
                    {
                        MyCamera.MV_USB3_DEVICE_INFO stUsb3DeviceInfo = (MyCamera.MV_USB3_DEVICE_INFO)MyCamera.ByteToStruct(stDevInfo.SpecialInfo.stUsb3VInfo, typeof(MyCamera.MV_USB3_DEVICE_INFO));
                        Console.WriteLine("\n" + i.ToString() + ": [U3V] User Define Name : " + stUsb3DeviceInfo.chUserDefinedName);
                        Console.WriteLine("\n Serial Number : " + stUsb3DeviceInfo.chSerialNumber);
                        Console.WriteLine("\n Device Number : " + stUsb3DeviceInfo.nDeviceNumber);
                    }
                }

                Int32 nDevIndex = 0;
                Console.Write("\nPlease input index (0 -- {0:d}) : ", stDevList.nDeviceNum - 1);
                try
                {
                    nDevIndex = Convert.ToInt32(Console.ReadLine());
                }
                catch
                {
                    Console.Write("Invalid Input!\n");
                    break;
                }

                if (nDevIndex > stDevList.nDeviceNum - 1 || nDevIndex < 0)
                {
                    Console.Write("Input Error!\n");
                    break;
                }
                stDevInfo = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(stDevList.pDeviceInfo[nDevIndex], typeof(MyCamera.MV_CC_DEVICE_INFO));

                // ch:创建设备 | en:Create device
                nRet = device.MV_CC_CreateDevice_NET(ref stDevInfo);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Create device failed:{0:x8}", nRet);
                    break;
                }

                // ch:打开设备 | en:Open device
                nRet = device.MV_CC_OpenDevice_NET();
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Open device failed:{0:x8}", nRet);
                    break;
                }

                // ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera)
                if (stDevInfo.nTLayerType == MyCamera.MV_GIGE_DEVICE)
                {
                    int nPacketSize = device.MV_CC_GetOptimalPacketSize_NET();
                    if (nPacketSize > 0)
                    {
                        nRet = device.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize);
                        if (nRet != MyCamera.MV_OK)
                        {
                            Console.WriteLine("Warning: Set Packet Size failed {0:x8}", nRet);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Warning: Get Packet Size failed {0:x8}", nPacketSize);
                    }
                }

                // ch:设置触发模式为off || en:set trigger mode as off
                nRet = device.MV_CC_SetEnumValue_NET("TriggerMode", 0);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Set TriggerMode failed!");
                    break;
                }

                // ch:注册回调函数 | en:Register image callback
                ImageCallback = new MyCamera.cbOutputExdelegate(ImageCallbackFunc);
                nRet          = device.MV_CC_RegisterImageCallBackEx_NET(ImageCallback, IntPtr.Zero);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Register image callback failed!");
                    break;
                }

                // ch:开启抓图 || en: start grab image
                nRet = device.MV_CC_StartGrabbing_NET();
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Start grabbing failed:{0:x8}", nRet);
                    break;
                }

                Console.WriteLine("Press enter to exit");
                Console.ReadLine();

                // ch:停止抓图 | en:Stop grabbing
                nRet = device.MV_CC_StopGrabbing_NET();
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Stop grabbing failed{0:x8}", nRet);
                    break;
                }

                // ch:关闭设备 | en:Close device
                nRet = device.MV_CC_CloseDevice_NET();
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Close device failed{0:x8}", nRet);
                    break;
                }

                // ch:销毁设备 | en:Destroy device
                nRet = device.MV_CC_DestroyDevice_NET();
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Destroy device failed:{0:x8}", nRet);
                    break;
                }
            } while (false);

            if (MyCamera.MV_OK != nRet)
            {
                // ch:销毁设备 | en:Destroy device
                nRet = device.MV_CC_DestroyDevice_NET();
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Destroy device failed:{0:x8}", nRet);
                }
            }

            Console.WriteLine("Press enter to exit");
            Console.ReadKey();
        }
Ejemplo n.º 14
0
        private bool DeviceOpenAll()
        {
            if (m_stDeviceList.nDeviceNum == 0)
            {
                StrErrorMsg = "无相机设备";
                return(false);
            }
            cbImage = new MyCamera.cbOutputExdelegate(ImageCallBack);
            int    nIndex;
            string UserDefinedName;

            foreach (var item in m_listUserDefinedName)
            {
                nIndex          = item.Key;
                UserDefinedName = item.Value;
                //获取选择的设备信息
                MyCamera.MV_CC_DEVICE_INFO device =
                    (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(m_stDeviceList.pDeviceInfo[nIndex], typeof(MyCamera.MV_CC_DEVICE_INFO));

                m_dicMyCamera[nIndex] = new MyCamera();
                if (m_dicMyCamera[nIndex] == null)
                {
                    StrErrorMsg = "相机" + UserDefinedName + "对象创建失败";
                    m_dicMyCamera.Remove(nIndex);
                    return(false);
                }
                int nRet = m_dicMyCamera[nIndex].MV_CC_CreateDevice_NET(ref device);

                if (MyCamera.MV_OK != nRet)
                {
                    StrErrorMsg = "相机" + UserDefinedName + "创建设备失败";
                    m_dicMyCamera.Remove(nIndex);
                    return(false);
                }

                for (int i = 0; i < 2; i++)
                {
                    nRet = m_dicMyCamera[nIndex].MV_CC_OpenDevice_NET();
                    if (MyCamera.MV_OK != nRet)
                    {
                        StrErrorMsg = "相机" + UserDefinedName + "打开设备失败,正在尝试重连";
                        Thread.Sleep(1000);
                    }
                    else
                    {
                        break;
                    }
                }

                if (MyCamera.MV_OK != nRet)
                {
                    StrErrorMsg = "相机" + UserDefinedName + "打开设备失败(" + nRet.ToString("X") + ")";
                    m_dicMyCamera.Remove(nIndex);
                    return(false);
                }
                else
                {
                    m_pDeviceInfo[nIndex] = device;
                    //探测网络最佳包大小
                    int nPacketSize = m_dicMyCamera[nIndex].MV_CC_GetOptimalPacketSize_NET();
                    if (nPacketSize > 0)
                    {
                        nRet = m_dicMyCamera[nIndex].MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize);
                        if (nRet != MyCamera.MV_OK)
                        {
                            StrErrorMsg = "相机" + UserDefinedName + "设置数据包大小失败(" + nRet.ToString("X") + ")";
                        }
                    }
                    else
                    {
                        StrErrorMsg = "相机" + UserDefinedName + "设置数据包大小失败(" + nRet.ToString("X") + ")";
                    }
                    //打开软触发模式
                    m_dicMyCamera[nIndex].MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);
                    m_dicMyCamera[nIndex].MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE);
                    ////打开实时模式
                    //m_dicMyCamera[nIndex].MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_OFF);

                    m_stFrameInfo[nIndex]            = new MyCamera.MV_FRAME_OUT_INFO_EX();
                    m_dicSaveImge[nIndex]            = new SaveImage();
                    m_dicImageCallBackSignal[nIndex] = new EventWaitHandle(false, EventResetMode.AutoReset);
                    m_dicMyCamera[nIndex].MV_CC_RegisterImageCallBackEx_NET(cbImage, (IntPtr)nIndex);
                }
            }
            return(true);
        }
Ejemplo n.º 15
0
        //打开相机
        public override void OpenCamera()
        {
            int nRet = -1;

            #region FindCamera
            if (!Model.m_bCameraFound)
            {
                nRet = CameraOperator.EnumDevices(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref m_pDeviceList);
                if (0 != nRet)
                {
                    MessageBox.Show("枚举设备失败!");
                    Model.m_bCameraFound = false;
                    return;
                }
                Model.m_bCameraFound = true;
            }
            #endregion

            #region OpenCamera

            if (!Model.m_bCameraOpened)
            {
                //ch:获取选择的设备信息 | en:Get selected device information
                MyCamera.MV_CC_DEVICE_INFO device =
                    (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(m_pDeviceList.pDeviceInfo[0], //打开第一个相机
                                                                       typeof(MyCamera.MV_CC_DEVICE_INFO));
                // ch:打开设备 | en:Open device
                nRet = m_pOperator.Open(ref device);
                if (MyCamera.MV_OK != nRet)
                {
                    MessageBox.Show("设备打开失败!");
                    return;
                }
                m_pOperator.SetEnumValue("AcquisitionMode", 2);                // 工作在连续模式
                m_pOperator.SetEnumValue("TriggerMode", Model.m_bTriggerMode); //  连续拍摄模式
                Model.m_bCameraOpened = true;
            }
            #endregion

            #region StartGrabbing

            if (!Model.m_bGrabbing)
            {
                m_pOperator.GetIntValue("WidthMax", ref iWidth);
                m_pOperator.GetIntValue("HeightMax", ref iHeigth);

                m_nBufSizeForDriver = iWidth * iHeigth * 3;
                m_pBufForDriver     = new byte[iWidth * iHeigth * 3];

                m_nBufSizeForSaveImage = iWidth * iHeigth * 3 * 3 + 2048;
                m_pBufForSaveImage     = new byte[iWidth * iHeigth * 3 * 3 + 2048];

                m_pDataForRed   = new byte[iWidth * iHeigth];
                m_pDataForGreen = new byte[iWidth * iHeigth];
                m_pDataForBlue  = new byte[iWidth * iHeigth];

                // ch:注册回调函数 | en:Register image callback
                ImageCallback = new MyCamera.cbOutputExdelegate(GrabImage);
                nRet          = m_pOperator.RegisterImageCallBackForRGB(ImageCallback, IntPtr.Zero);

                if (CameraOperator.CO_OK != nRet)
                {
                    MessageBox.Show("注册回调失败!");
                    return;
                }
                // ch:开启抓图 | en:start grab
                nRet = m_pOperator.StartGrabbing();
                if (MyCamera.MV_OK != nRet)
                {
                    MessageBox.Show("开始取流失败!");
                    return;
                }
                Model.m_bGrabbing = true;
            }
            #endregion
        }
Ejemplo n.º 16
0
        public short Open()
        {
            try
            {
                if (null == this.camera)
                {
                    this.camera = new MyCamera();
                }

                int nRet;
                // ch:创建设备列表 en:Create Device List
                System.GC.Collect();
                nRet = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref deviceList);
                if (0 != nRet)
                {
                    return((short)nRet);
                }

                if (this.deviceList.nDeviceNum < 1)
                {
                    return(-1);
                }

                // 获取设备信息
                MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(deviceList.pDeviceInfo[0], typeof(MyCamera.MV_CC_DEVICE_INFO));
                if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE)
                {
                    IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stGigEInfo, 0);
                    MyCamera.MV_GIGE_DEVICE_INFO gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_GIGE_DEVICE_INFO));
                }
                else if (device.nTLayerType == MyCamera.MV_USB_DEVICE)
                {
                    IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(device.SpecialInfo.stUsb3VInfo, 0);
                    MyCamera.MV_USB3_DEVICE_INFO usbInfo = (MyCamera.MV_USB3_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_USB3_DEVICE_INFO));
                }

                // ch:打开设备 | en:Open device
                nRet = this.camera.MV_CC_CreateDevice_NET(ref device);
                if (MyCamera.MV_OK != nRet)
                {
                    return(-2);
                }

                nRet = this.camera.MV_CC_OpenDevice_NET();
                if (MyCamera.MV_OK != nRet)
                {
                    this.camera.MV_CC_DestroyDevice_NET();
                    return(-2);
                }

                // ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera)
                if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE)
                {
                    int nPacketSize = this.camera.MV_CC_GetOptimalPacketSize_NET();
                    if (nPacketSize > 0)
                    {
                        nRet = this.camera.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize);
                    }
                }

                //设置参数
                nRet = this.camera.MV_CC_SetExposureAutoMode_NET((uint)MyCamera.MV_CAM_EXPOSURE_AUTO_MODE.MV_EXPOSURE_AUTO_MODE_OFF);
                nRet = this.camera.MV_CC_SetGainMode_NET((uint)MyCamera.MV_CAM_GAIN_MODE.MV_GAIN_MODE_OFF);

                // ch:设置采集连续模式 | en:Set Continues Aquisition Mode
                this.camera.MV_CC_SetEnumValue_NET("AcquisitionMode", 2); // ch:工作在连续模式 | en:Acquisition On Continuous Mode
                this.camera.MV_CC_SetEnumValue_NET("TriggerMode", 0);     // ch:连续模式 | en:Continuous
                // ch:注册回调函数 | en:Register image callback
                imageCallback = new MyCamera.cbOutputExdelegate(ImageCallbackFunc);
                nRet          = this.camera.MV_CC_RegisterImageCallBackEx_NET(imageCallback, IntPtr.Zero);
                if (MyCamera.MV_OK != nRet)
                {
                    return(-3);
                }

                return(0);
            }
            catch (Exception)
            {
                return(-5);
            }
        }