Hello Mat

 找回密码
 立即注册
查看: 1262|回复: 0

海康相机Demo

[复制链接]

1298

主题

1524

帖子

114

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22653
发表于 2023-2-5 17:57:48 | 显示全部楼层 |阅读模式
海康相机Demo软件协议:ffmpeg_LICENSE.md、GenICam_License.txt、LGPL-2.1.txt、LGPL-3.0.txt、libjpeg-turbo_LICENSE.md、NI_License.txt、PCRE2_License.txt、xxhash_License.txt

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using MvCamCtrl.NET;
  10. using System.Runtime.InteropServices;
  11. using System.Threading;
  12. using System.IO;

  13. using System.Drawing.Imaging;
  14. using System.Diagnostics;
  15. using System.Collections.ObjectModel;

  16. namespace BasicDemo
  17. {
  18.     public partial class Form1 : Form
  19.     {
  20.         [DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)]
  21.         public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);

  22.         MyCamera.MV_CC_DEVICE_INFO_LIST m_stDeviceList = new MyCamera.MV_CC_DEVICE_INFO_LIST();
  23.         private MyCamera m_MyCamera = new MyCamera();
  24.         bool m_bGrabbing = false;
  25.         Thread m_hReceiveThread = null;
  26.         MyCamera.MV_FRAME_OUT_INFO_EX m_stFrameInfo = new MyCamera.MV_FRAME_OUT_INFO_EX();

  27.         // ch:用于从驱动获取图像的缓存 | en:Buffer for getting image from driver
  28.         UInt32 m_nBufSizeForDriver = 0;
  29.         IntPtr m_BufForDriver = IntPtr.Zero;
  30.         private static Object BufForDriverLock = new Object();

  31.         public Form1()
  32.         {
  33.             InitializeComponent();
  34.             DeviceListAcq();
  35.             Control.CheckForIllegalCrossThreadCalls = false;
  36.         }

  37.         // ch:显示错误信息 | en:Show error message
  38.         private void ShowErrorMsg(string csMessage, int nErrorNum)
  39.         {
  40.             string errorMsg;
  41.             if (nErrorNum == 0)
  42.             {
  43.                 errorMsg = csMessage;
  44.             }
  45.             else
  46.             {
  47.                 errorMsg = csMessage + ": Error =" + String.Format("{0:X}", nErrorNum);
  48.             }

  49.             switch (nErrorNum)
  50.             {
  51.                 case MyCamera.MV_E_HANDLE: errorMsg += " Error or invalid handle "; break;
  52.                 case MyCamera.MV_E_SUPPORT: errorMsg += " Not supported function "; break;
  53.                 case MyCamera.MV_E_BUFOVER: errorMsg += " Cache is full "; break;
  54.                 case MyCamera.MV_E_CALLORDER: errorMsg += " Function calling order error "; break;
  55.                 case MyCamera.MV_E_PARAMETER: errorMsg += " Incorrect parameter "; break;
  56.                 case MyCamera.MV_E_RESOURCE: errorMsg += " Applying resource failed "; break;
  57.                 case MyCamera.MV_E_NODATA: errorMsg += " No data "; break;
  58.                 case MyCamera.MV_E_PRECONDITION: errorMsg += " Precondition error, or running environment changed "; break;
  59.                 case MyCamera.MV_E_VERSION: errorMsg += " Version mismatches "; break;
  60.                 case MyCamera.MV_E_NOENOUGH_BUF: errorMsg += " Insufficient memory "; break;
  61.                 case MyCamera.MV_E_UNKNOW: errorMsg += " Unknown error "; break;
  62.                 case MyCamera.MV_E_GC_GENERIC: errorMsg += " General error "; break;
  63.                 case MyCamera.MV_E_GC_ACCESS: errorMsg += " Node accessing condition error "; break;
  64.                 case MyCamera.MV_E_ACCESS_DENIED: errorMsg += " No permission "; break;
  65.                 case MyCamera.MV_E_BUSY: errorMsg += " Device is busy, or network disconnected "; break;
  66.                 case MyCamera.MV_E_NETER: errorMsg += " Network error "; break;
  67.             }

  68.             MessageBox.Show(errorMsg, "PROMPT");
  69.         }

  70.         private Boolean IsMonoData(MyCamera.MvGvspPixelType enGvspPixelType)
  71.         {
  72.             switch (enGvspPixelType)
  73.             {
  74.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono8:
  75.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10:
  76.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono10_Packed:
  77.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12:
  78.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_Mono12_Packed:
  79.                     return true;

  80.                 default:
  81.                     return false;
  82.             }
  83.         }

  84.         /************************************************************************
  85.          *  @fn     IsColorData()
  86.          *  @brief  判断是否是彩色数据
  87.          *  @param  enGvspPixelType         [IN]           像素格式
  88.          *  @return 成功,返回0;错误,返回-1
  89.          ************************************************************************/
  90.         private Boolean IsColorData(MyCamera.MvGvspPixelType enGvspPixelType)
  91.         {
  92.             switch (enGvspPixelType)
  93.             {
  94.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR8:
  95.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG8:
  96.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB8:
  97.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG8:
  98.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10:
  99.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10:
  100.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10:
  101.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10:
  102.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12:
  103.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12:
  104.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12:
  105.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12:
  106.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR10_Packed:
  107.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG10_Packed:
  108.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB10_Packed:
  109.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG10_Packed:
  110.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGR12_Packed:
  111.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerRG12_Packed:
  112.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerGB12_Packed:
  113.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_BayerBG12_Packed:
  114.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_RGB8_Packed:
  115.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_Packed:
  116.                 case MyCamera.MvGvspPixelType.PixelType_Gvsp_YUV422_YUYV_Packed:
  117.                     return true;

  118.                 default:
  119.                     return false;
  120.             }
  121.         }

  122.         private void bnEnum_Click(object sender, EventArgs e)
  123.         {
  124.             DeviceListAcq();
  125.         }

  126.         private void DeviceListAcq()
  127.         {
  128.             // ch:创建设备列表 | en:Create Device List
  129.             System.GC.Collect();
  130.             cbDeviceList.Items.Clear();
  131.             m_stDeviceList.nDeviceNum = 0;
  132.             int nRet = MyCamera.MV_CC_EnumDevices_NET(MyCamera.MV_GIGE_DEVICE | MyCamera.MV_USB_DEVICE, ref m_stDeviceList);
  133.             if (0 != nRet)
  134.             {
  135.                 ShowErrorMsg("Enumerate devices fail!",0);
  136.                 return;
  137.             }

  138.             // ch:在窗体列表中显示设备名 | en:Display device name in the form list
  139.             for (int i = 0; i < m_stDeviceList.nDeviceNum; i++)
  140.             {
  141.                 MyCamera.MV_CC_DEVICE_INFO device = (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(m_stDeviceList.pDeviceInfo[i], typeof(MyCamera.MV_CC_DEVICE_INFO));
  142.                 if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE)
  143.                 {
  144.                     MyCamera.MV_GIGE_DEVICE_INFO gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO)MyCamera.ByteToStruct(device.SpecialInfo.stGigEInfo, typeof(MyCamera.MV_GIGE_DEVICE_INFO));
  145.                     
  146.                     if (gigeInfo.chUserDefinedName != "")
  147.                     {
  148.                         cbDeviceList.Items.Add("GEV: " + gigeInfo.chUserDefinedName + " (" + gigeInfo.chSerialNumber + ")");
  149.                     }
  150.                     else
  151.                     {
  152.                         cbDeviceList.Items.Add("GEV: " + gigeInfo.chManufacturerName + " " + gigeInfo.chModelName + " (" + gigeInfo.chSerialNumber + ")");
  153.                     }
  154.                 }
  155.                 else if (device.nTLayerType == MyCamera.MV_USB_DEVICE)
  156.                 {
  157.                     MyCamera.MV_USB3_DEVICE_INFO usbInfo = (MyCamera.MV_USB3_DEVICE_INFO)MyCamera.ByteToStruct(device.SpecialInfo.stUsb3VInfo, typeof(MyCamera.MV_USB3_DEVICE_INFO));
  158.                     if (usbInfo.chUserDefinedName != "")
  159.                     {
  160.                         cbDeviceList.Items.Add("U3V: " + usbInfo.chUserDefinedName + " (" + usbInfo.chSerialNumber + ")");
  161.                     }
  162.                     else
  163.                     {
  164.                         cbDeviceList.Items.Add("U3V: " + usbInfo.chManufacturerName + " " + usbInfo.chModelName + " (" + usbInfo.chSerialNumber + ")");
  165.                     }
  166.                 }
  167.             }

  168.             // ch:选择第一项 | en:Select the first item
  169.             if (m_stDeviceList.nDeviceNum != 0)
  170.             {
  171.                 cbDeviceList.SelectedIndex = 0;
  172.             }
  173.         }

  174.         private void SetCtrlWhenOpen()
  175.         {
  176.             bnOpen.Enabled = false;

  177.             bnClose.Enabled = true;
  178.             bnStartGrab.Enabled = true;
  179.             bnStopGrab.Enabled = false;
  180.             bnContinuesMode.Enabled = true;
  181.             bnContinuesMode.Checked = true;
  182.             bnTriggerMode.Enabled = true;
  183.             cbSoftTrigger.Enabled = false;
  184.             bnTriggerExec.Enabled = false;

  185.             tbExposure.Enabled = true;
  186.             tbGain.Enabled = true;
  187.             tbFrameRate.Enabled = true;
  188.             bnGetParam.Enabled = true;
  189.             bnSetParam.Enabled = true;
  190.         }

  191.         private void bnOpen_Click(object sender, EventArgs e)
  192.         {
  193.             if (m_stDeviceList.nDeviceNum == 0 || cbDeviceList.SelectedIndex == -1)
  194.             {
  195.                 ShowErrorMsg("No device, please select", 0);
  196.                 return;
  197.             }

  198.             // ch:获取选择的设备信息 | en:Get selected device information
  199.             MyCamera.MV_CC_DEVICE_INFO device =
  200.                 (MyCamera.MV_CC_DEVICE_INFO)Marshal.PtrToStructure(m_stDeviceList.pDeviceInfo[cbDeviceList.SelectedIndex],
  201.                                                               typeof(MyCamera.MV_CC_DEVICE_INFO));

  202.             // ch:打开设备 | en:Open device
  203.             if (null == m_MyCamera)
  204.             {
  205.                 m_MyCamera = new MyCamera();
  206.                 if (null == m_MyCamera)
  207.                 {
  208.                     return;
  209.                 }
  210.             }

  211.             int nRet = m_MyCamera.MV_CC_CreateDevice_NET(ref device);
  212.             if (MyCamera.MV_OK != nRet)
  213.             {
  214.                 return;
  215.             }

  216.             nRet = m_MyCamera.MV_CC_OpenDevice_NET();
  217.             if (MyCamera.MV_OK != nRet)
  218.             {
  219.                 m_MyCamera.MV_CC_DestroyDevice_NET();
  220.                 ShowErrorMsg("Device open fail!", nRet);
  221.                 return;
  222.             }

  223.             // ch:探测网络最佳包大小(只对GigE相机有效) | en:Detection network optimal package size(It only works for the GigE camera)
  224.             if (device.nTLayerType == MyCamera.MV_GIGE_DEVICE)
  225.             {
  226.                 int nPacketSize = m_MyCamera.MV_CC_GetOptimalPacketSize_NET();
  227.                 if (nPacketSize > 0)
  228.                 {
  229.                     nRet = m_MyCamera.MV_CC_SetIntValue_NET("GevSCPSPacketSize", (uint)nPacketSize);
  230.                     if (nRet != MyCamera.MV_OK)
  231.                     {
  232.                         ShowErrorMsg("Set Packet Size failed!", nRet);
  233.                     }
  234.                 }
  235.                 else
  236.                 {
  237.                     ShowErrorMsg("Get Packet Size failed!", nPacketSize);
  238.                 }
  239.             }

  240.             // ch:设置采集连续模式 | en:Set Continues Aquisition Mode
  241.             m_MyCamera.MV_CC_SetEnumValue_NET("AcquisitionMode", (uint)MyCamera.MV_CAM_ACQUISITION_MODE.MV_ACQ_MODE_CONTINUOUS);
  242.             m_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_OFF);

  243.             bnGetParam_Click(null, null);// ch:获取参数 | en:Get parameters

  244.             // ch:控件操作 | en:Control operation
  245.             SetCtrlWhenOpen();
  246.         }

  247.         private void SetCtrlWhenClose()
  248.         {
  249.             bnOpen.Enabled = true;

  250.             bnClose.Enabled = false;
  251.             bnStartGrab.Enabled = false;
  252.             bnStopGrab.Enabled = false;
  253.             bnContinuesMode.Enabled = false;
  254.             bnTriggerMode.Enabled = false;
  255.             cbSoftTrigger.Enabled = false;
  256.             bnTriggerExec.Enabled = false;

  257.             bnSaveBmp.Enabled = false;
  258.             bnSaveJpg.Enabled = false;
  259.             bnSaveTiff.Enabled = false;
  260.             bnSavePng.Enabled = false;
  261.             tbExposure.Enabled = false;
  262.             tbGain.Enabled = false;
  263.             tbFrameRate.Enabled = false;
  264.             bnGetParam.Enabled = false;
  265.             bnSetParam.Enabled = false;
  266.         }

  267.         private void bnClose_Click(object sender, EventArgs e)
  268.         {
  269.             // ch:取流标志位清零 | en:Reset flow flag bit
  270.             if (m_bGrabbing == true)
  271.             {
  272.                 m_bGrabbing = false;
  273.                 m_hReceiveThread.Join();
  274.             }

  275.             if (m_BufForDriver != IntPtr.Zero)
  276.             {
  277.                 Marshal.Release(m_BufForDriver);
  278.             }

  279.             // ch:关闭设备 | en:Close Device
  280.             m_MyCamera.MV_CC_CloseDevice_NET();
  281.             m_MyCamera.MV_CC_DestroyDevice_NET();

  282.             // ch:控件操作 | en:Control Operation
  283.             SetCtrlWhenClose();
  284.         }

  285.         private void bnContinuesMode_CheckedChanged(object sender, EventArgs e)
  286.         {
  287.             if (bnContinuesMode.Checked)
  288.             {
  289.                 m_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_OFF);
  290.                 cbSoftTrigger.Enabled = false;
  291.                 bnTriggerExec.Enabled = false;
  292.             }
  293.         }

  294.         private void bnTriggerMode_CheckedChanged(object sender, EventArgs e)
  295.         {
  296.             // ch:打开触发模式 | en:Open Trigger Mode
  297.             if (bnTriggerMode.Checked)
  298.             {
  299.                 m_MyCamera.MV_CC_SetEnumValue_NET("TriggerMode", (uint)MyCamera.MV_CAM_TRIGGER_MODE.MV_TRIGGER_MODE_ON);

  300.                 // ch:触发源选择:0 - Line0; | en:Trigger source select:0 - Line0;
  301.                 //           1 - Line1;
  302.                 //           2 - Line2;
  303.                 //           3 - Line3;
  304.                 //           4 - Counter;
  305.                 //           7 - Software;
  306.                 if (cbSoftTrigger.Checked)
  307.                 {
  308.                     m_MyCamera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE);
  309.                     if (m_bGrabbing)
  310.                     {
  311.                         bnTriggerExec.Enabled = true;
  312.                     }
  313.                 }
  314.                 else
  315.                 {
  316.                     m_MyCamera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0);
  317.                 }
  318.                 cbSoftTrigger.Enabled = true;
  319.             }
  320.         }

  321.         private void SetCtrlWhenStartGrab()
  322.         {
  323.             bnStartGrab.Enabled = false;
  324.             bnStopGrab.Enabled = true;

  325.             if (bnTriggerMode.Checked && cbSoftTrigger.Checked)
  326.             {
  327.                 bnTriggerExec.Enabled = true;
  328.             }

  329.             bnSaveBmp.Enabled = true;
  330.             bnSaveJpg.Enabled = true;
  331.             bnSaveTiff.Enabled = true;
  332.             bnSavePng.Enabled = true;
  333.         }

  334.         public void ReceiveThreadProcess()
  335.         {
  336.             MyCamera.MV_FRAME_OUT stFrameInfo = new MyCamera.MV_FRAME_OUT();
  337.             MyCamera.MV_DISPLAY_FRAME_INFO stDisplayInfo = new MyCamera.MV_DISPLAY_FRAME_INFO();
  338.             int nRet = MyCamera.MV_OK;

  339.             while (m_bGrabbing)
  340.             {
  341.                 nRet = m_MyCamera.MV_CC_GetImageBuffer_NET(ref stFrameInfo, 1000);
  342.                 if (nRet == MyCamera.MV_OK)
  343.                 {
  344.                     lock (BufForDriverLock)
  345.                     {
  346.                         if (m_BufForDriver == IntPtr.Zero || stFrameInfo.stFrameInfo.nFrameLen > m_nBufSizeForDriver)
  347.                         {
  348.                             if (m_BufForDriver != IntPtr.Zero)
  349.                             {
  350.                                 Marshal.Release(m_BufForDriver);
  351.                                 m_BufForDriver = IntPtr.Zero;
  352.                             }

  353.                             m_BufForDriver = Marshal.AllocHGlobal((Int32)stFrameInfo.stFrameInfo.nFrameLen);
  354.                             if (m_BufForDriver == IntPtr.Zero)
  355.                             {
  356.                                 return;
  357.                             }
  358.                             m_nBufSizeForDriver = stFrameInfo.stFrameInfo.nFrameLen;
  359.                         }

  360.                         m_stFrameInfo = stFrameInfo.stFrameInfo;
  361.                         CopyMemory(m_BufForDriver, stFrameInfo.pBufAddr, stFrameInfo.stFrameInfo.nFrameLen);
  362.                     }

  363.                     if (RemoveCustomPixelFormats(stFrameInfo.stFrameInfo.enPixelType))
  364.                     {
  365.                         m_MyCamera.MV_CC_FreeImageBuffer_NET(ref stFrameInfo);
  366.                         continue;
  367.                     }
  368.                     stDisplayInfo.hWnd = pictureBox1.Handle;
  369.                     stDisplayInfo.pData = stFrameInfo.pBufAddr;
  370.                     stDisplayInfo.nDataLen = stFrameInfo.stFrameInfo.nFrameLen;
  371.                     stDisplayInfo.nWidth = stFrameInfo.stFrameInfo.nWidth;
  372.                     stDisplayInfo.nHeight = stFrameInfo.stFrameInfo.nHeight;
  373.                     stDisplayInfo.enPixelType = stFrameInfo.stFrameInfo.enPixelType;
  374.                     m_MyCamera.MV_CC_DisplayOneFrame_NET(ref stDisplayInfo);

  375.                     m_MyCamera.MV_CC_FreeImageBuffer_NET(ref stFrameInfo);
  376.                 }
  377.                 else
  378.                 {
  379.                     if (bnTriggerMode.Checked)
  380.                     {
  381.                         Thread.Sleep(5);
  382.                     }
  383.                 }
  384.             }
  385.         }

  386.         private void bnStartGrab_Click(object sender, EventArgs e)
  387.         {
  388.             // ch:标志位置位true | en:Set position bit true
  389.             m_bGrabbing = true;

  390.             m_hReceiveThread = new Thread(ReceiveThreadProcess);
  391.             m_hReceiveThread.Start();

  392.             m_stFrameInfo.nFrameLen = 0;//取流之前先清除帧长度
  393.             m_stFrameInfo.enPixelType = MyCamera.MvGvspPixelType.PixelType_Gvsp_Undefined;
  394.             // ch:开始采集 | en:Start Grabbing
  395.             int nRet = m_MyCamera.MV_CC_StartGrabbing_NET();
  396.             if (MyCamera.MV_OK != nRet)
  397.             {
  398.                 m_bGrabbing = false;
  399.                 m_hReceiveThread.Join();
  400.                 ShowErrorMsg("Start Grabbing Fail!", nRet);
  401.                 return;
  402.             }

  403.             // ch:控件操作 | en:Control Operation
  404.             SetCtrlWhenStartGrab();
  405.         }

  406.         private void cbSoftTrigger_CheckedChanged(object sender, EventArgs e)
  407.         {
  408.             if (cbSoftTrigger.Checked)
  409.             {
  410.                 // ch:触发源设为软触发 | en:Set trigger source as Software
  411.                 m_MyCamera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_SOFTWARE);
  412.                 if (m_bGrabbing)
  413.                 {
  414.                     bnTriggerExec.Enabled = true;
  415.                 }
  416.             }
  417.             else
  418.             {
  419.                 m_MyCamera.MV_CC_SetEnumValue_NET("TriggerSource", (uint)MyCamera.MV_CAM_TRIGGER_SOURCE.MV_TRIGGER_SOURCE_LINE0);
  420.                 bnTriggerExec.Enabled = false;
  421.             }
  422.         }

  423.         private void bnTriggerExec_Click(object sender, EventArgs e)
  424.         {
  425.             // ch:触发命令 | en:Trigger command
  426.             int nRet = m_MyCamera.MV_CC_SetCommandValue_NET("TriggerSoftware");
  427.             if (MyCamera.MV_OK != nRet)
  428.             {
  429.                 ShowErrorMsg("Trigger Software Fail!", nRet);
  430.             }
  431.         }

  432.         private void SetCtrlWhenStopGrab()
  433.         {
  434.             bnStartGrab.Enabled = true;
  435.             bnStopGrab.Enabled = false;

  436.             bnTriggerExec.Enabled = false;


  437.             bnSaveBmp.Enabled = false;
  438.             bnSaveJpg.Enabled = false;
  439.             bnSaveTiff.Enabled = false;
  440.             bnSavePng.Enabled = false;
  441.         }

  442.         private void bnStopGrab_Click(object sender, EventArgs e)
  443.         {
  444.             // ch:标志位设为false | en:Set flag bit false
  445.             m_bGrabbing = false;
  446.             m_hReceiveThread.Join();

  447.             // ch:停止采集 | en:Stop Grabbing
  448.             int nRet = m_MyCamera.MV_CC_StopGrabbing_NET();
  449.             if (nRet != MyCamera.MV_OK)
  450.             {
  451.                 ShowErrorMsg("Stop Grabbing Fail!" , nRet);
  452.             }

  453.             // ch:控件操作 | en:Control Operation
  454.             SetCtrlWhenStopGrab();
  455.         }

  456.         private void bnSaveBmp_Click(object sender, EventArgs e)
  457.         {
  458.             if (false == m_bGrabbing)
  459.             {
  460.                 ShowErrorMsg("Not Start Grabbing", 0);
  461.                 return;
  462.             }

  463.             if (RemoveCustomPixelFormats(m_stFrameInfo.enPixelType))
  464.             {
  465.                 ShowErrorMsg("Not Support!", 0);
  466.                 return;
  467.             }

  468.             MyCamera.MV_SAVE_IMG_TO_FILE_PARAM stSaveFileParam = new MyCamera.MV_SAVE_IMG_TO_FILE_PARAM();

  469.             lock (BufForDriverLock)
  470.             {
  471.                 if (m_stFrameInfo.nFrameLen == 0)
  472.                 {
  473.                     ShowErrorMsg("Save Bmp Fail!", 0);
  474.                     return;
  475.                 }
  476.                 stSaveFileParam.enImageType = MyCamera.MV_SAVE_IAMGE_TYPE.MV_Image_Bmp;
  477.                 stSaveFileParam.enPixelType = m_stFrameInfo.enPixelType;
  478.                 stSaveFileParam.pData = m_BufForDriver;
  479.                 stSaveFileParam.nDataLen = m_stFrameInfo.nFrameLen;
  480.                 stSaveFileParam.nHeight = m_stFrameInfo.nHeight;
  481.                 stSaveFileParam.nWidth = m_stFrameInfo.nWidth;
  482.                 stSaveFileParam.iMethodValue = 2;
  483.                 stSaveFileParam.pImagePath = "Image_w" + stSaveFileParam.nWidth.ToString() + "_h" + stSaveFileParam.nHeight.ToString() + "_fn" + m_stFrameInfo.nFrameNum.ToString() + ".bmp";
  484.                 int nRet = m_MyCamera.MV_CC_SaveImageToFile_NET(ref stSaveFileParam);
  485.                 if (MyCamera.MV_OK != nRet)
  486.                 {
  487.                     ShowErrorMsg("Save Bmp Fail!", nRet);
  488.                     return;
  489.                 }
  490.             }
  491.             
  492.             ShowErrorMsg("Save Succeed!", 0);
  493.         }

  494.         private void bnSaveJpg_Click(object sender, EventArgs e)
  495.         {
  496.             if (false == m_bGrabbing)
  497.             {
  498.                 ShowErrorMsg("Not Start Grabbing", 0);
  499.                 return;
  500.             }

  501.             if (RemoveCustomPixelFormats(m_stFrameInfo.enPixelType))
  502.             {
  503.                 ShowErrorMsg("Not Support!", 0);
  504.                 return;
  505.             }

  506.             MyCamera.MV_SAVE_IMG_TO_FILE_PARAM stSaveFileParam = new MyCamera.MV_SAVE_IMG_TO_FILE_PARAM();

  507.             lock (BufForDriverLock)
  508.             {
  509.                 if (m_stFrameInfo.nFrameLen == 0)
  510.                 {
  511.                     ShowErrorMsg("Save Jpeg Fail!", 0);
  512.                     return;
  513.                 }
  514.                 stSaveFileParam.enImageType = MyCamera.MV_SAVE_IAMGE_TYPE.MV_Image_Jpeg;
  515.                 stSaveFileParam.enPixelType = m_stFrameInfo.enPixelType;
  516.                 stSaveFileParam.pData = m_BufForDriver;
  517.                 stSaveFileParam.nDataLen = m_stFrameInfo.nFrameLen;
  518.                 stSaveFileParam.nHeight = m_stFrameInfo.nHeight;
  519.                 stSaveFileParam.nWidth = m_stFrameInfo.nWidth;
  520.                 stSaveFileParam.nQuality = 80;
  521.                 stSaveFileParam.iMethodValue = 2;
  522.                 stSaveFileParam.pImagePath = "Image_w" + stSaveFileParam.nWidth.ToString() + "_h" + stSaveFileParam.nHeight.ToString() + "_fn" + m_stFrameInfo.nFrameNum.ToString() + ".jpg";
  523.                 int nRet = m_MyCamera.MV_CC_SaveImageToFile_NET(ref stSaveFileParam);
  524.                 if (MyCamera.MV_OK != nRet)
  525.                 {
  526.                     ShowErrorMsg("Save Jpeg Fail!", nRet);
  527.                     return;
  528.                 }
  529.             }

  530.             ShowErrorMsg("Save Succeed!", 0);
  531.         }

  532.         private void bnSavePng_Click(object sender, EventArgs e)
  533.         {
  534.             if (false == m_bGrabbing)
  535.             {
  536.                 ShowErrorMsg("Not Start Grabbing", 0);
  537.                 return;
  538.             }

  539.             if (RemoveCustomPixelFormats(m_stFrameInfo.enPixelType))
  540.             {
  541.                 ShowErrorMsg("Not Support!", 0);
  542.                 return;
  543.             }

  544.             MyCamera.MV_SAVE_IMG_TO_FILE_PARAM stSaveFileParam = new MyCamera.MV_SAVE_IMG_TO_FILE_PARAM();

  545.             lock (BufForDriverLock)
  546.             {
  547.                 if (m_stFrameInfo.nFrameLen == 0)
  548.                 {
  549.                     ShowErrorMsg("Save Png Fail!", 0);
  550.                     return;
  551.                 }
  552.                 stSaveFileParam.enImageType = MyCamera.MV_SAVE_IAMGE_TYPE.MV_Image_Png;
  553.                 stSaveFileParam.enPixelType = m_stFrameInfo.enPixelType;
  554.                 stSaveFileParam.pData = m_BufForDriver;
  555.                 stSaveFileParam.nDataLen = m_stFrameInfo.nFrameLen;
  556.                 stSaveFileParam.nHeight = m_stFrameInfo.nHeight;
  557.                 stSaveFileParam.nWidth = m_stFrameInfo.nWidth;
  558.                 stSaveFileParam.nQuality = 8;
  559.                 stSaveFileParam.iMethodValue = 2;
  560.                 stSaveFileParam.pImagePath = "Image_w" + stSaveFileParam.nWidth.ToString() + "_h" + stSaveFileParam.nHeight.ToString() + "_fn" + m_stFrameInfo.nFrameNum.ToString() + ".png";
  561.                 int nRet = m_MyCamera.MV_CC_SaveImageToFile_NET(ref stSaveFileParam);
  562.                 if (MyCamera.MV_OK != nRet)
  563.                 {
  564.                     ShowErrorMsg("Save Png Fail!", nRet);
  565.                     return;
  566.                 }
  567.             }

  568.             ShowErrorMsg("Save Succeed!", 0);
  569.         }

  570.         private void bnSaveTiff_Click(object sender, EventArgs e)
  571.         {
  572.             if (false == m_bGrabbing)
  573.             {
  574.                 ShowErrorMsg("Not Start Grabbing", 0);
  575.                 return;
  576.             }

  577.             if (RemoveCustomPixelFormats(m_stFrameInfo.enPixelType))
  578.             {
  579.                 ShowErrorMsg("Not Support!", 0);
  580.                 return;
  581.             }

  582.             MyCamera.MV_SAVE_IMG_TO_FILE_PARAM stSaveFileParam = new MyCamera.MV_SAVE_IMG_TO_FILE_PARAM();

  583.             lock (BufForDriverLock)
  584.             {
  585.                 if (m_stFrameInfo.nFrameLen == 0)
  586.                 {
  587.                     ShowErrorMsg("Save Tiff Fail!", 0);
  588.                     return;
  589.                 }
  590.                 stSaveFileParam.enImageType = MyCamera.MV_SAVE_IAMGE_TYPE.MV_Image_Tif;
  591.                 stSaveFileParam.enPixelType = m_stFrameInfo.enPixelType;
  592.                 stSaveFileParam.pData = m_BufForDriver;
  593.                 stSaveFileParam.nDataLen = m_stFrameInfo.nFrameLen;
  594.                 stSaveFileParam.nHeight = m_stFrameInfo.nHeight;
  595.                 stSaveFileParam.nWidth = m_stFrameInfo.nWidth;
  596.                 stSaveFileParam.iMethodValue = 2;
  597.                 stSaveFileParam.pImagePath = "Image_w" + stSaveFileParam.nWidth.ToString() + "_h" + stSaveFileParam.nHeight.ToString() + "_fn" + m_stFrameInfo.nFrameNum.ToString() + ".tif";
  598.                 int nRet = m_MyCamera.MV_CC_SaveImageToFile_NET(ref stSaveFileParam);
  599.                 if (MyCamera.MV_OK != nRet)
  600.                 {
  601.                     ShowErrorMsg("Save Tiff Fail!", nRet);
  602.                     return;
  603.                 }
  604.             }
  605.             ShowErrorMsg("Save Succeed!", 0);
  606.         }

  607.         private void bnGetParam_Click(object sender, EventArgs e)
  608.         {
  609.             MyCamera.MVCC_FLOATVALUE stParam = new MyCamera.MVCC_FLOATVALUE();
  610.             int nRet = m_MyCamera.MV_CC_GetFloatValue_NET("ExposureTime", ref stParam);
  611.             if (MyCamera.MV_OK == nRet)
  612.             {
  613.                 tbExposure.Text = stParam.fCurValue.ToString("F1");
  614.             }

  615.             nRet = m_MyCamera.MV_CC_GetFloatValue_NET("Gain", ref stParam);
  616.             if (MyCamera.MV_OK == nRet)
  617.             {
  618.                 tbGain.Text = stParam.fCurValue.ToString("F1");
  619.             }

  620.             nRet = m_MyCamera.MV_CC_GetFloatValue_NET("ResultingFrameRate", ref stParam);
  621.             if (MyCamera.MV_OK == nRet)
  622.             {
  623.                 tbFrameRate.Text = stParam.fCurValue.ToString("F1");
  624.             }
  625.         }

  626.         private void bnSetParam_Click(object sender, EventArgs e)
  627.         {
  628.             try
  629.             {
  630.                 float.Parse(tbExposure.Text);
  631.                 float.Parse(tbGain.Text);
  632.                 float.Parse(tbFrameRate.Text);
  633.             }
  634.             catch
  635.             {
  636.                 ShowErrorMsg("Please enter correct type!", 0);
  637.                 return;
  638.             }

  639.             m_MyCamera.MV_CC_SetEnumValue_NET("ExposureAuto", 0);
  640.             int nRet = m_MyCamera.MV_CC_SetFloatValue_NET("ExposureTime", float.Parse(tbExposure.Text));
  641.             if (nRet != MyCamera.MV_OK)
  642.             {
  643.                 ShowErrorMsg("Set Exposure Time Fail!", nRet);
  644.             }

  645.             m_MyCamera.MV_CC_SetEnumValue_NET("GainAuto", 0);
  646.             nRet = m_MyCamera.MV_CC_SetFloatValue_NET("Gain", float.Parse(tbGain.Text));
  647.             if (nRet != MyCamera.MV_OK)
  648.             {
  649.                 ShowErrorMsg("Set Gain Fail!", nRet);
  650.             }

  651.             nRet = m_MyCamera.MV_CC_SetFloatValue_NET("AcquisitionFrameRate", float.Parse(tbFrameRate.Text));
  652.             if (nRet != MyCamera.MV_OK)
  653.             {
  654.                 ShowErrorMsg("Set Frame Rate Fail!", nRet);
  655.             }
  656.         }

  657.         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  658.         {
  659.             bnClose_Click(sender, e);
  660.         }

  661.         // ch:去除自定义的像素格式 | en:Remove custom pixel formats
  662.         private bool RemoveCustomPixelFormats(MyCamera.MvGvspPixelType enPixelFormat)
  663.         {
  664.             Int32 nResult = ((int)enPixelFormat) & (unchecked((Int32)0x80000000));
  665.             if (0x80000000 == nResult)
  666.             {
  667.                 return true;
  668.             }
  669.             else
  670.             {
  671.                 return false;
  672.             }
  673.         }
  674.     }
  675. }
复制代码




算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-5-18 16:31 , Processed in 0.228073 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表