예제 #1
0
        private IDictionary <ECameraAutoType, ECameraAutoValue> GetAutoValueDictionary()
        {
            var dictionary = new Dictionary <ECameraAutoType, ECameraAutoValue>();

            var autoExposure     = new MyCamera.MVCC_ENUMVALUE();
            var autoGain         = new MyCamera.MVCC_ENUMVALUE();
            var autoWhiteBalance = new MyCamera.MVCC_ENUMVALUE();

            _device.MV_CC_GetExposureAutoMode_NET(ref autoExposure);
            _device.MV_CC_GetGainMode_NET(ref autoGain);
            _device.MV_CC_GetBalanceWhiteAuto_NET(ref autoWhiteBalance);

            switch ((MyCamera.MV_CAM_EXPOSURE_AUTO_MODE)autoExposure.nCurValue)
            {
            case MyCamera.MV_CAM_EXPOSURE_AUTO_MODE.MV_EXPOSURE_AUTO_MODE_OFF:
                dictionary[ECameraAutoType.Exposure] = ECameraAutoValue.Off;
                break;

            case MyCamera.MV_CAM_EXPOSURE_AUTO_MODE.MV_EXPOSURE_AUTO_MODE_ONCE:
                dictionary[ECameraAutoType.Exposure] = ECameraAutoValue.Once;
                break;

            case MyCamera.MV_CAM_EXPOSURE_AUTO_MODE.MV_EXPOSURE_AUTO_MODE_CONTINUOUS:
                dictionary[ECameraAutoType.Exposure] = ECameraAutoValue.Continuous;
                break;
            }

            switch ((MyCamera.MV_CAM_GAIN_MODE)autoGain.nCurValue)
            {
            case MyCamera.MV_CAM_GAIN_MODE.MV_GAIN_MODE_OFF:
                dictionary[ECameraAutoType.Gain] = ECameraAutoValue.Off;
                break;

            case MyCamera.MV_CAM_GAIN_MODE.MV_GAIN_MODE_ONCE:
                dictionary[ECameraAutoType.Gain] = ECameraAutoValue.Once;
                break;

            case MyCamera.MV_CAM_GAIN_MODE.MV_GAIN_MODE_CONTINUOUS:
                dictionary[ECameraAutoType.Gain] = ECameraAutoValue.Continuous;
                break;
            }

            switch ((MyCamera.MV_CAM_BALANCEWHITE_AUTO)autoWhiteBalance.nCurValue)
            {
            case MyCamera.MV_CAM_BALANCEWHITE_AUTO.MV_BALANCEWHITE_AUTO_OFF:
                dictionary[ECameraAutoType.WhiteBalance] = ECameraAutoValue.Off;
                break;

            case MyCamera.MV_CAM_BALANCEWHITE_AUTO.MV_BALANCEWHITE_AUTO_ONCE:
                dictionary[ECameraAutoType.WhiteBalance] = ECameraAutoValue.Once;
                break;

            case MyCamera.MV_CAM_BALANCEWHITE_AUTO.MV_BALANCEWHITE_AUTO_CONTINUOUS:
                dictionary[ECameraAutoType.WhiteBalance] = ECameraAutoValue.Continuous;
                break;
            }

            return(dictionary);
        }
예제 #2
0
 public override string GetImageFormat()
 {
     MyCamera.MVCC_ENUMVALUE enumParam = new MyCamera.MVCC_ENUMVALUE();
     if (hikvisionCamera.MV_CC_GetEnumValue_NET("PixelFormat", ref enumParam) == MyCamera.MV_OK)
     {
         return(enumParam.nCurValue.ToString());
     }
     return(null);
 }
예제 #3
0
        public CameraParameterInfo GetParameterInfo()
        {
            var triggerMode = new MyCamera.MVCC_ENUMVALUE();

            _device.MV_CC_GetTriggerMode_NET(ref triggerMode);

            return(new CameraParameterInfo(
                       triggerMode.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON,
                       GetParameterDictionary(),
                       GetAutoValueDictionary()));
        }
예제 #4
0
        /****************************************************************************
        * @fn           GetEnumValue
        * @brief        获取Enum型参数值
        * @param        strKey                IN        参数键值,具体键值名称参考HikCameraNode.xls文档
        * @param        pnValue               OUT       返回值
        * @return       成功:0;错误:-1
        ****************************************************************************/
        public int GetEnumValue(string strKey, ref UInt32 pnValue)
        {
            MyCamera.MVCC_ENUMVALUE stParam = new MyCamera.MVCC_ENUMVALUE();
            int nRet = m_pCSI.MV_CC_GetEnumValue_NET(strKey, ref stParam);

            if (MyCamera.MV_OK != nRet)
            {
                return(CO_FAIL);
            }

            pnValue = stParam.nCurValue;

            return(CO_OK);
        }
예제 #5
0
        /// <summary>相机是否处于触发模式</summary>
        //JFCmrTrigMode TrigMode { get; set; }
        public int GetTrigMode(out JFCmrTrigMode tm)
        {
            tm = JFCmrTrigMode.disable;
            if (!IsDeviceOpen)
            {
                return((int)ErrorDef.NotOpen);
            }
            MyCamera.MVCC_ENUMVALUE eval = new MyCamera.MVCC_ENUMVALUE();
            int err = _hikCmr.MV_CC_GetEnumValue_NET("TriggerMode", ref eval);

            //MyCamera.MVCC_INTVALUE val = new MyCamera.MVCC_INTVALUE();
            //int err = _hikCmr.MV_CC_GetIntValue_NET("TriggerMode", ref val);
            if (MyCamera.MV_OK != err)
            {
                return((int)ErrorDef.InvokeFailed);
            }
            if (eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_OFF)
            {
                tm = JFCmrTrigMode.disable;
                return((int)ErrorDef.Success);
            }

            err = _hikCmr.MV_CC_GetEnumValue_NET("TriggerSource", ref eval);
            if (MyCamera.MV_OK != err)
            {
                return((int)ErrorDef.InvokeFailed);
            }

            if (eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE)
            {
                tm = JFCmrTrigMode.software;
                return((int)ErrorDef.Success);
            }
            else if (eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0 ||
                     eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE1 ||
                     eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE2 ||
                     eval.nCurValue == (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE3)
            {
                tm = JFCmrTrigMode.hardware_line0 + ((int)eval.nCurValue - (int)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0);
                return((int)ErrorDef.Success);
            }

            return((int)ErrorDef.TrigModeUnMatch);
        }
예제 #6
0
 private bool Acquisition(MyCamera.MV_CAM_ACQUISITION_MODE acqMode)
 {
     MyCamera.MVCC_ENUMVALUE enumParam = new MyCamera.MVCC_ENUMVALUE();
     if (hikvisionCamera.MV_CC_GetAcquisitionMode_NET(ref enumParam) != MyCamera.MV_OK)
     {
         return(false);
     }
     if (enumParam.nCurValue != (uint)acqMode)
     {
         if (hikvisionCamera.MV_CC_SetAcquisitionMode_NET((uint)acqMode) != MyCamera.MV_OK)
         {
             return(false);
         }
     }
     if (hikvisionCamera.MV_CC_StartGrabbing_NET() != MyCamera.MV_OK)
     {
         return(false);
     }
     return(true);
 }
예제 #7
0
 public override bool SetImageFormat(ImageFormat format)
 {
     try
     {
         if (format == ImageFormat.Mono8)
         {
             MyCamera.MVCC_ENUMVALUE stEnumValue = new MyCamera.MVCC_ENUMVALUE();
             int nRet = camera.MV_CC_GetPixelFormat_NET(ref stEnumValue);
             if (stEnumValue.nCurValue != (uint)MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8)
             {
                 uint enValue = (uint)MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8; nRet = camera.MV_CC_SetPixelFormat_NET(enValue);
                 if (MyCamera.MV_OK != nRet)
                 {
                     WriteInfoLog($"{this.Info.UserID} camera Set PixelFormat failed");
                 }
             }
         }
         else
         {
             MyCamera.MVCC_ENUMVALUE stEnumValue = new MyCamera.MVCC_ENUMVALUE();
             int nRet = camera.MV_CC_GetPixelFormat_NET(ref stEnumValue);
             if (stEnumValue.nCurValue != (uint)MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed)
             {
                 uint enValue = (uint)MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed;
                 nRet = camera.MV_CC_SetPixelFormat_NET(enValue);
                 if (MyCamera.MV_OK != nRet)
                 {
                     WriteInfoLog($"{this.Info.UserID} camera Set PixelFormat failed");
                 }
             }
         }
     }
     catch (Exception e)
     {
         WriteErrorLog($"{this.Info.UserID} camera {e.ToString()}");
         bConnectOk = false;
         return(false);
     }
     return(base.SetImageFormat(format));
 }
예제 #8
0
        private void bnGetLineMode_Click(object sender, EventArgs e)
        {
            int nRet;

            MyCamera.MVCC_ENUMVALUE stModeValue = new MyCamera.MVCC_ENUMVALUE();
            nRet = m_pMyCamera.MV_CC_GetEnumValue_NET("LineMode", ref stModeValue);
            if (MyCamera.MV_OK != nRet)
            {
                ShowErrorMsg("Get Fail!", nRet);
                return;
            }

            cbLineMode.Items.Clear();

            for (int i = 0; i < stModeValue.nSupportedNum; i++)
            {
                cbLineMode.Items.Add("LineMode" + stModeValue.nSupportValue[i]);
                if (stModeValue.nCurValue == stModeValue.nSupportValue[i])
                {
                    cbLineMode.SelectedIndex = i;
                }
            }
        }
예제 #9
0
        static void Main(string[] args)
        {
            int      nRet   = MyCamera.MV_OK;
            MyCamera device = new MyCamera();

            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:判断设备是否是设置的3D格式 | en:Judge Whether the device is set to 3D format
                MyCamera.MVCC_ENUMVALUE EnumValue = new MyCamera.MVCC_ENUMVALUE();
                nRet = device.MV_CC_GetEnumValue_NET("PixelFormat", ref EnumValue);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Get the Camera format fail:{0:x8}", nRet);
                    break;
                }

                MyCamera.MvGvspPixelType ePixelFormat = (MyCamera.MvGvspPixelType)EnumValue.nCurValue;
                switch (ePixelFormat)
                {
                case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_ABC32:
                case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_ABC32f:
                case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_AB32:
                case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_AB32f:
                case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_AC32:
                case MyCamera.MvGvspPixelType.PixelType_Gvsp_Coord3D_AC32f:
                {
                    nRet = MyCamera.MV_OK;
                    break;
                }

                default:
                {
                    nRet = MyCamera.MV_E_SUPPORT;
                    break;
                }
                }
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("This is not a supported 3D format!");
                    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", Convert.ToUInt32(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:获取触发模式的访问模式 | en:Get Access mode of trigger mode
                MyCamera.MV_XML_AccessMode pAccessMode = MyCamera.MV_XML_AccessMode.AM_NI;
                if (MyCamera.MV_OK != device.MV_XML_GetNodeAccessMode_NET("TriggerMode", ref pAccessMode))
                {
                    Console.WriteLine("Get Access mode of trigger mode fail! nRet [0x%x]\n", nRet);
                }
                else
                {
                    // ch:设置触发模式为off || en:set trigger mode as off
                    if (MyCamera.MV_OK != device.MV_CC_SetEnumValue_NET("TriggerMode", 0))
                    {
                        Console.WriteLine("Set TriggerMode failed!");
                        break;
                    }
                }

                // ch:获取包大小 || en: Get Payload Size
                MyCamera.MVCC_INTVALUE stParam = new MyCamera.MVCC_INTVALUE();
                nRet = device.MV_CC_GetIntValue_NET("PayloadSize", ref stParam);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Get PayloadSize failed:{0:x8}", nRet);
                    break;
                }
                UInt32 nPayloadSize = stParam.nCurValue;

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

                uint   nImageNum     = 100;
                byte[] bSaveImageBuf = null;

                try
                {
                    // ch:申请足够大的缓存,用于保存获取到的图像
                    bSaveImageBuf = new byte[nPayloadSize * nImageNum];
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Malloc  Save buffer fail!\n");
                    break;
                }

                uint nSaveImageSize = nPayloadSize * nImageNum;

                // ch:已获取的总图片大小
                uint nSaveDataLen = 0;

                MyCamera.MV_FRAME_OUT stOutFrame = new MyCamera.MV_FRAME_OUT();
                for (uint i = 0; i < nImageNum; i++)
                {
                    nRet = device.MV_CC_GetImageBuffer_NET(ref stOutFrame, 1000);
                    if (nRet == MyCamera.MV_OK)
                    {
                        Console.WriteLine("Get One Frame:" + "Width[" + Convert.ToString(stOutFrame.stFrameInfo.nWidth) + "] , Height[" + Convert.ToString(stOutFrame.stFrameInfo.nHeight)
                                          + "] , FrameNum[" + Convert.ToString(stOutFrame.stFrameInfo.nFrameNum) + "]");

                        if (nSaveImageSize > (nSaveDataLen + stOutFrame.stFrameInfo.nFrameLen))
                        {
                            // ch:将图像拷贝到pSaveImageBuf | Copy one frame of image to the buffer named pSaveImageBuf
                            Marshal.Copy(stOutFrame.pBufAddr, bSaveImageBuf, Convert.ToInt32(nSaveDataLen), Convert.ToInt32(stOutFrame.stFrameInfo.nFrameLen));
                            nSaveDataLen += stOutFrame.stFrameInfo.nFrameLen;
                        }

                        nRet = device.MV_CC_FreeImageBuffer_NET(ref stOutFrame);
                        if (nRet != MyCamera.MV_OK)
                        {
                            Console.WriteLine("Free Image Buffer fail:{0:x8}", nRet);
                        }
                    }
                    else
                    {
                        Console.WriteLine("No data:{0:x8}", nRet);
                    }
                }

                MyCamera.MV_SAVE_POINT_CLOUD_PARAM stSavePoCloudPar = new MyCamera.MV_SAVE_POINT_CLOUD_PARAM();

                stSavePoCloudPar.nLinePntNum = stOutFrame.stFrameInfo.nWidth;
                stSavePoCloudPar.nLineNum    = stOutFrame.stFrameInfo.nHeight * nImageNum;

                byte[] bDstImageBuf  = new byte[stSavePoCloudPar.nLineNum * stSavePoCloudPar.nLinePntNum * (16 * 3 + 4) + 2048];
                uint   nDstImageSize = stSavePoCloudPar.nLineNum * stSavePoCloudPar.nLinePntNum * (16 * 3 + 4) + 2048;

                stSavePoCloudPar.enPointCloudFileType = MyCamera.MV_SAVE_POINT_CLOUD_FILE_TYPE.MV_PointCloudFile_PLY;
                stSavePoCloudPar.enSrcPixelType       = stOutFrame.stFrameInfo.enPixelType;
                stSavePoCloudPar.nSrcDataLen          = nSaveDataLen;

                GCHandle hSrcData = GCHandle.Alloc(bSaveImageBuf, GCHandleType.Pinned);
                stSavePoCloudPar.pSrcData = hSrcData.AddrOfPinnedObject();

                GCHandle hDstData = GCHandle.Alloc(bDstImageBuf, GCHandleType.Pinned);
                stSavePoCloudPar.pDstBuf = hDstData.AddrOfPinnedObject();

                stSavePoCloudPar.nDstBufSize = nDstImageSize;

                //Save point cloud data
                nRet = device.MV_CC_SavePointCloudData_NET(ref stSavePoCloudPar);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Save point cloud data fail:{0:x8}", nRet);
                    break;
                }

                FileStream file = new FileStream("PointCloudData.ply", FileMode.Create, FileAccess.Write);
                file.Write(bDstImageBuf, 0, Convert.ToInt32(stSavePoCloudPar.nDstBufLen));
                file.Close();
                Console.WriteLine("Save point cloud data succeed");

                hSrcData.Free();
                hDstData.Free();

                // ch:停止抓图 | en:Stop grab image
                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();
        }
예제 #10
0
파일: Recording.cs 프로젝트: HUT-17/HUT
        static void Main(string[] args)
        {
            int      nRet   = MyCamera.MV_OK;
            MyCamera device = new MyCamera();

            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
                if (MyCamera.MV_OK != device.MV_CC_SetEnumValue_NET("TriggerMode", 0))
                {
                    Console.WriteLine("Set TriggerMode failed!");
                    break;
                }

                // ch:获取包大小 || en: Get Payload Size
                MyCamera.MVCC_INTVALUE stParam = new MyCamera.MVCC_INTVALUE();
                nRet = device.MV_CC_GetIntValue_NET("PayloadSize", ref stParam);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Get PayloadSize failed:{0:x8}", nRet);
                    break;
                }
                g_nPayloadSize = stParam.nCurValue;

                MyCamera.MV_CC_RECORD_PARAM stRecordPar = new MyCamera.MV_CC_RECORD_PARAM();
                nRet = device.MV_CC_GetIntValue_NET("Width", ref stParam);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Get Width failed: nRet {0:x8}", nRet);
                    break;
                }
                stRecordPar.nWidth = (ushort)stParam.nCurValue;

                nRet = device.MV_CC_GetIntValue_NET("Height", ref stParam);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Get Height failed: nRet {0:x8}", nRet);
                    break;
                }
                stRecordPar.nHeight = (ushort)stParam.nCurValue;

                MyCamera.MVCC_ENUMVALUE stEnumValue = new MyCamera.MVCC_ENUMVALUE();
                nRet = device.MV_CC_GetEnumValue_NET("PixelFormat", ref stEnumValue);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Get Width failed: nRet {0:x8}", nRet);
                    break;
                }
                stRecordPar.enPixelType = (MyCamera.MvGvspPixelType)stEnumValue.nCurValue;

                MyCamera.MVCC_FLOATVALUE stFloatValue = new MyCamera.MVCC_FLOATVALUE();
                nRet = device.MV_CC_GetFloatValue_NET("ResultingFrameRate", ref stFloatValue);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Get Float value failed: nRet {0:x8}", nRet);
                    break;
                }
                // ch:帧率(大于1/16)fps | en:Frame Rate (>1/16)fps
                stRecordPar.fFrameRate = stFloatValue.fCurValue;
                // ch:码率kbps(128kbps-16Mbps) | en:Bitrate kbps(128kbps-16Mbps)
                stRecordPar.nBitRate = 1000;
                // ch:录像格式(仅支持AVI) | en:Record Format(AVI is only supported)
                stRecordPar.enRecordFmtType = MyCamera.MV_RECORD_FORMAT_TYPE.MV_FormatType_AVI;
                stRecordPar.strFilePath     = "./Recording.avi";
                nRet = device.MV_CC_StartRecord_NET(ref stRecordPar);
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Start Record failed: nRet {0:x8}", nRet);
                    break;
                }

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

                Thread hReceiveImageThreadHandle = new Thread(ReceiveImageWorkThread);
                hReceiveImageThreadHandle.Start(device);

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

                g_bExit = true;
                hReceiveImageThreadHandle.Join();

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

                // ch:停止录像 | en:Stop record
                nRet = device.MV_CC_StopRecord_NET();
                if (MyCamera.MV_OK != nRet)
                {
                    Console.WriteLine("Stop Record 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();
        }
예제 #11
0
        // Get the value of various feature nodes
        static int GetParameters(ref MyCamera device)
        {
            if (null == device)
            {
                return(MyCamera.MV_E_PARAMETER);
            }

            int nRet = MyCamera.MV_OK;

            // Get value of Integer nodes. Such as, 'width' etc.
            MyCamera.MVCC_INTVALUE stIntVal = new MyCamera.MVCC_INTVALUE();
            nRet = device.MV_CC_GetIntValue_NET("Width", ref stIntVal);
            if (MyCamera.MV_OK != nRet)
            {
                Console.WriteLine("Get width failed:{0:x8}", nRet);
                return(nRet);
            }
            Console.WriteLine("Current Width:{0:d}", stIntVal.nCurValue);

            // Get value of Enum nodes. Such as, 'TriggerMode' etc.
            MyCamera.MVCC_ENUMVALUE stEnumVal = new MyCamera.MVCC_ENUMVALUE();
            nRet = device.MV_CC_GetEnumValue_NET("TriggerMode", ref stEnumVal);
            if (MyCamera.MV_OK != nRet)
            {
                Console.WriteLine("Get Trigger Mode failed:{0:x8}", nRet);
                return(nRet);
            }
            Console.WriteLine("Current TriggerMode:{0:d}", stEnumVal.nCurValue);

            // Get value of float nodes. Such as, 'AcquisitionFrameRate' etc.
            MyCamera.MVCC_FLOATVALUE stFloatVal = new MyCamera.MVCC_FLOATVALUE();
            nRet = device.MV_CC_GetFloatValue_NET("AcquisitionFrameRate", ref stFloatVal);
            if (MyCamera.MV_OK != nRet)
            {
                Console.WriteLine("Get AcquisitionFrameRate failed:{0:x8}", nRet);
                return(nRet);
            }
            Console.WriteLine("Current AcquisitionFrameRate:{0:f}Fps", stFloatVal.fCurValue);

            // Get value of bool nodes. Such as, 'AcquisitionFrameRateEnable' etc.
            bool bBoolVal = false;

            nRet = device.MV_CC_GetBoolValue_NET("AcquisitionFrameRateEnable", ref bBoolVal);
            if (MyCamera.MV_OK != nRet)
            {
                Console.WriteLine("Get AcquisitionFrameRateEnable failed:{0:x8}", nRet);
                return(nRet);
            }
            Console.WriteLine("Current AcquisitionFrameRateEnable:{0:d}", bBoolVal);

            // Get value of String nodes. Such as, 'DeviceUserID' etc.
            MyCamera.MVCC_STRINGVALUE stStrVal = new MyCamera.MVCC_STRINGVALUE();
            nRet = device.MV_CC_GetStringValue_NET("DeviceUserID", ref stStrVal);
            if (MyCamera.MV_OK != nRet)
            {
                Console.WriteLine("Get DeviceUserID failed:{0:x8}", nRet);
                return(nRet);
            }
            Console.WriteLine("Current DeviceUserID:{0:s}", stStrVal.chCurValue);

            return(MyCamera.MV_OK);
        }