close

C:\Program Files\IDS\uEye\Develop\Source\uEye_DotNet_C#_Cockpit

Live取像

image

選擇像機

image

 

CameraChoose.cs

AddCameraListItem委派

cameraDelegate實體

      cameraDelegate = new AddCameraListItem(UpdateCameraList);

UpdateCameraList:  Callback函式,符合cmeraDelegate委派格式

m_CameraIdToOpen 攝影機Id

m_DeviceIdToOpen 硬體Id

   1: public partial class CameraChoose : Form
   2: {
   3:     public delegate void AddCameraListItem();
   4:     public AddCameraListItem cameraDelegate;
   5:  
   6:     private Int32 m_CameraIdToOpen;
   7:     private Int32 m_DeviceIdToOpen;
   8:  
   9:     public Int32 CameraID
  10:     {
  11:         get
  12:         {
  13:             return m_CameraIdToOpen;
  14:         }
  15:     }
  16:  
  17:     public Int32 DeviceID
  18:     {
  19:         get
  20:         {
  21:             return m_DeviceIdToOpen;
  22:         }
  23:     }

UpdateCameraList:  Callback函式

image

image

image

   1: private void UpdateCameraList()
   2:         {
   3:             listViewCamera.Items.Clear();
   4:  
   5:             uEye.Types.CameraInformation[] cameraList;   
   6:             uEye.Info.Camera.GetCameraList(out cameraList);   //  Get camera list in the computer
   7:  
   8:             foreach (uEye.Types.CameraInformation info in cameraList)
   9:             {
  10:                 ListViewItem item = new ListViewItem();
  11:                 item.Text = info.InUse ? "No" : "Yes";
  12:                 item.ImageIndex = info.InUse ? 1 : 0;
  13:  
  14:                 item.SubItems.Add(info.CameraID.ToString());
  15:                 item.SubItems.Add(info.DeviceID.ToString());
  16:                 item.SubItems.Add(info.Model);
  17:                 item.SubItems.Add(info.SerialNumber);
  18:  
  19:                 listViewCamera.Items.Add(item);
  20:             }
  21:  
  22:             if (cameraList.Count() != 0)
  23:             {
  24:                 listViewCamera.Items[0].Selected = true;
  25:                 buttonOk.Enabled = true;
  26:             }
  27:             else
  28:             {
  29:                 // no camera disable button
  30:                 buttonOk.Enabled = false;
  31:             }
  32:  
  33:             // auto resize
  34:             listViewCamera.AutoResizeColumn(3, ColumnHeaderAutoResizeStyle.ColumnContent);
  35:             listViewCamera.AutoResizeColumn(4, ColumnHeaderAutoResizeStyle.ColumnContent);
  36:             listViewCamera.Columns[listViewCamera.Columns.Count - 1].Width = -2;
  37:         }

註冊2個事件: 新增裝置EventNewDevice

uEye.Info.Camera.EventNewDevice += onCameraEvent;
uEye.Info.Camera.EventDeviceRemoved += onCameraEvent;

   1: private void onCameraEvent(object sender, EventArgs e)
   2: {
   3:     //InitCameraList();
   4:     this.Invoke(cameraDelegate);
   5: }


true 當控制項失去焦點,如果選取的項目不會出現反白顯示

預設為 true。

   1: private void InitCameraList()
   2: {
   3:     listViewCamera.HideSelection = false;
   4: }

滑鼠雙擊listViewCamera選定攝影機

   1: private void listViewCamera_DoubleClick(object sender, EventArgs e)
   2:        {
   3:            if (listViewCamera.SelectedItems.Count != 0)
   4:            {
   5:                m_CameraIdToOpen = Convert.ToInt32(listViewCamera.SelectedItems[0].SubItems[1].Text);
   6:                m_DeviceIdToOpen = Convert.ToInt32(listViewCamera.SelectedItems[0].SubItems[2].Text);
   7:                this.DialogResult = DialogResult.OK;
   8:                Close();
   9:            }
  10:            else
  11:            {
  12:                MessageBox.Show("No camera selected...");
  13:            }
  14:        }

取消;未選擇任何攝影機

   1: private void buttonCancel_Click(object sender, EventArgs e)
   2:        {
   3:            this.DialogResult = DialogResult.Cancel;
   4:            Close();
   5:        }

關閉CameraChoose視窗

   1: private void CameraChoose_FormClosing(object sender, FormClosingEventArgs e)
   2: {
   3:     uEye.Info.Camera.EventNewDevice -= onCameraEvent;
   4:     uEye.Info.Camera.EventDeviceRemoved -= onCameraEvent;
   5: }

當關閉CameraChoose 視窗後, 利用公開方法CameraID 得到攝影機ID

和DeviceID 取得硬體ID

   1: public Int32 CameraID
   2:        {
   3:            get
   4:            {
   5:                return m_CameraIdToOpen;
   6:            }
   7:        }
   8:  
   9:        public Int32 DeviceID
  10:        {
  11:            get
  12:            {
  13:                return m_DeviceIdToOpen;
  14:            }
  15:        }

 

==========================================================================

跳至 public MainForm()

   1: #region Variables
   2:  
   3:        // our camera class
   4:        uEye.Camera m_Camera;
   5:  
   6:        uEye.Defines.DisplayRenderMode m_RenderMode; // render mode
   7:        Boolean m_IsLive; // saves the capture state
   8:        Int32 m_s32FrameCount; 
   9:        private Timer m_UpdateTimer = new Timer();
  10:  
  11:        #endregion

水平和垂直捲軸事件是建立在PictureBox嵌入Panel中才成立

image

當點選1:2顯示畫面縮小(小於MainForm/Panel Size),水平和垂直捲軸自動消失

如果PictureBox不是建立在Panel之上,則當按下1:1按鈕亦不會有水平和垂直捲軸功能

image

設定pictureBoxDisplay的 SizeMode

讓pictureBoxDisplay寬跟高跟隨panelDisplay

   1: pictureBoxDisplay.SizeMode = PictureBoxSizeMode.CenterImage;
   2: this.pictureBoxDisplay.Width = panelDisplay.Width;
   3: this.pictureBoxDisplay.Height = panelDisplay.Height;

實體化攝影機: m_Camera = new uEye.Camera();

設定渲染模式: m_RenderMode

計時器功能設定: 每100ms更新一次,執行OnUpdateControls

   1: // initialize camera object
   2: // camera is not opened here
   3:   m_Camera = new uEye.Camera();
   4:  
   5:   m_IsLive = false;
   6:   m_RenderMode = uEye.Defines.DisplayRenderMode.FitToWindow;
   7:  
   8:   m_UpdateTimer.Interval = 100;
   9:   m_UpdateTimer.Tick += OnUpdateControls;

timer更新 statusbar,包含FPS、Capture Failed Counts和目前擷取影格數(m_s32FrameCount)。

   1: private void OnUpdateControls(object sender, EventArgs e)
   2: {
   3:     // we update here our statusbar 
   4:     Double dFramerate;
   5:     m_Camera.Timing.Framerate.GetCurrentFps(out dFramerate);
   6:     toolStripStatusLabelFPS.Text = "Fps: " + dFramerate.ToString("00.00");
   7:  
   8:     uEye.Types.CaptureStatus captureStatus;
   9:     m_Camera.Information.GetCaptureStatus(out captureStatus);
  10:  
  11:     toolStripStatusLabelFailed.Text = "Failed: " + captureStatus.Total;
  12:     toolStripStatusLabelFrameCount.Text = "Frames: " + m_s32FrameCount;
  13: }

啟動攝影機按鈕事件 toolStripButtonOpenFreerun_Click

   1: private void toolStripButtonOpenFreerun_Click(object sender, EventArgs e)
   2: {
   3:      uEye.Defines.Status statusRet;
   4:      statusRet = initCamera();
   5:  
   6:      if (statusRet == uEye.Defines.Status.SUCCESS)
   7:      {
   8:          // start capture
   9:          statusRet = m_Camera.Acquisition.Capture();
  10:          if (statusRet != uEye.Defines.Status.SUCCESS)
  11:          {
  12:               MessageBox.Show("Starting live video failed");
  13:          }
  14:          else
  15:          {
  16:               // everything is ok
  17:               m_IsLive = true;
  18:               UpdateToolbar();
  19:          }
  20:     }
  21:  
  22:             // cleanup on any camera error
  23:             if (statusRet != uEye.Defines.Status.SUCCESS && m_Camera.IsOpened)
  24:             {
  25:                 m_Camera.Exit();
  26:             }
  27:         }
  28: }

初始化攝影機 initCamera()

1. 攝影機選擇清單 chooseForm = new CameraChoose()

2. 狀態: statusRet

3. statusRet = m_Camera.Init(chooseForm.DeviceID | (Int32)uEye.Defines.DeviceEnumeration.UseDeviceID, pictureBoxDisplay.Handle)

3.1 利用攝影機ID+硬體ID結果傳入給第一個輸入引數s32Cam

3.2 pictureBoxDisplay.Handle傳入給第二個輸入引數WindowHandle

4. 給定一塊記憶體 m_Camera.Memory.Allocate();

5. 設定取像Callback Function: onFrameEvent

6. 影格數歸零m_s32FrameCount = 0

7. 計數器 m_UpdateTimer.Start

8. 取得攝影機Sensor資訊 m_Camera.Information.GetSensorInfo(out sensorInfo)

 

   1: private uEye.Defines.Status initCamera()
   2: {
   3:     CameraChoose chooseForm = new CameraChoose();
   4:     uEye.Defines.Status statusRet = uEye.Defines.Status.NO_SUCCESS;
   5:            
   6:     if (chooseForm.ShowDialog() == DialogResult.OK)
   7:     {
   8:          statusRet = m_Camera.Init(chooseForm.DeviceID | (Int32)uEye.Defines.DeviceEnumeration.UseDeviceID, pictureBoxDisplay.Handle);
   9:          if (statusRet != uEye.Defines.Status.SUCCESS)
  10:          {
  11:              MessageBox.Show("Initializing the camera failed");
  12:              return statusRet;
  13:          }
  14:               
  15:          statusRet = m_Camera.Memory.Allocate();
  16:          if (statusRet != uEye.Defines.Status.SUCCESS)
  17:          {
  18:                MessageBox.Show("Allocating memory failed");
  19:                return statusRet;
  20:          }
  21:  
  22:          // set event
  23:          m_Camera.EventFrame += onFrameEvent;
  24:  
  25:          // reset framecount
  26:          m_s32FrameCount = 0;
  27:  
  28:          // start update timer for our statusbar
  29:          m_UpdateTimer.Start();
  30:  
  31:          uEye.Types.SensorInfo sensorInfo;
  32:          m_Camera.Information.GetSensorInfo(out sensorInfo);
  33:  
  34:          pictureBoxDisplay.SizeMode = PictureBoxSizeMode.Normal;
  35:          toolStripStatusLabelCamera.Text = sensorInfo.SensorName;    
  36:      }
  37:  
  38:      return statusRet;
  39: }

繼續啟動攝影機按鈕事件 toolStripButtonOpenFreerun_Click

1. 開始擷取影像 m_Camera.Acquisition.Capture();

   1: if (statusRet == uEye.Defines.Status.SUCCESS)
   2: {
   3:      // start capture
   4:      statusRet = m_Camera.Acquisition.Capture();
   5:      if (statusRet != uEye.Defines.Status.SUCCESS)
   6:      {
   7:           MessageBox.Show("Starting live video failed");
   8:      }
   9:      else
  10:      {
  11:           // everything is ok
  12:           m_IsLive = true;
  13:           UpdateToolbar();
  14:      }
  15: }

UpdateToolbar()

   1: private void UpdateToolbar()
   2: {
   3:      toolStripButton1To1.Enabled = m_Camera.IsOpened;
   4:      toolStripButton1To2.Enabled = m_Camera.IsOpened;
   5:      toolStripButtonFitToWnd.Enabled = m_Camera.IsOpened;
   6:  
   7:      // general function to update all mainwindow controls
   8:      if (m_Camera.IsOpened)
   9:      {
  10:          // check if directrender or dib mode is active
  11:          uEye.Defines.DisplayMode displayMode;
  12:          m_Camera.Display.Mode.Get(out displayMode);
  13:     
  14:          toolStripButton1To2.Enabled = displayMode == uEye.Defines.DisplayMode.DiB;
  15:      }
  16:  
  17:       // enable/disable controls
  18:       toolStripButtonAES.Enabled = m_Camera.IsOpened ? m_Camera.AutoFeatures.Software.Shutter.Supported : false;
  19:       toolStripButtonAWB.Enabled = m_Camera.IsOpened ? m_Camera.AutoFeatures.Software.WhiteBalance.Supported : false;
  20:       toolStripButtonExit.Enabled = m_Camera.IsOpened;
  21:       toolStripButtonFreerun.Enabled = m_Camera.IsOpened;
  22:       toolStripButtonSettings.Enabled = m_Camera.IsOpened;
  23:       toolStripButtonSnapshot.Enabled = m_Camera.IsOpened;
  24:       toolStripButtonSaveImage.Enabled = m_Camera.IsOpened;
  25:       toolStripButtonLoadImage.Enabled = m_Camera.IsOpened;
  26:       toolStripButtonVideoRec.Enabled = m_Camera.IsOpened;
  27:  
  28:       toolStripButtonOpenFreerun.Enabled = !m_Camera.IsOpened;
  29:       toolStripButtonOpenStop.Enabled = !m_Camera.IsOpened;
  30:             
  31:       toolStripButtonFreerun.Checked = m_Camera.IsOpened ? m_IsLive : false;
  32:       toolStripButtonVideoRec.Checked = m_Camera.IsOpened ? m_Camera.Video.Running : false;
  33:  
  34:       toolStripMenuItemCloseCamera.Enabled = m_Camera.IsOpened;
  35:       toolStripMenuItemLoadImage.Enabled = m_Camera.IsOpened;
  36:       toolStripMenuItemLoadParameterFromEEPROM.Enabled = m_Camera.IsOpened;
  37:       toolStripMenuItemLoadParameterFromFile.Enabled = m_Camera.IsOpened;
  38:       toolStripMenuItemOpenCamera.Enabled = !m_Camera.IsOpened;
  39:       toolStripMenuItemOpenCameraLive.Enabled = !m_Camera.IsOpened;
  40:       toolStripMenuItemSaveImage.Enabled = m_Camera.IsOpened;
  41:       toolStripMenuItemSaveParameterToEEPROM.Enabled = m_Camera.IsOpened;
  42:       toolStripMenuItemSaveParameterToFile.Enabled = m_Camera.IsOpened;
  43:  
  44:       toolStripMenuItemSnapshot.Enabled = m_Camera.IsOpened;
  45:       toolStripMenuItemFreerun.Enabled = m_Camera.IsOpened;
  46:       toolStripMenuItemFreerun.Checked = m_Camera.IsOpened ? m_IsLive : false;
  47:  
  48:       toolStripMenuItem1To1.Enabled = m_Camera.IsOpened;
  49:       toolStripMenuItem1To2.Enabled = m_Camera.IsOpened;
  50:       toolStripMenuItemFitToWindow.Enabled = m_Camera.IsOpened;
  51:  
  52:       toolStripMenuItemMirrorRightLeft.Enabled = m_Camera.IsOpened;
  53:       toolStripMenuItemMirrorUpDown.Enabled = m_Camera.IsOpened;
  54:       toolStripMenuItemCrosshair.Enabled = m_Camera.IsOpened;
  55:       toolStripMenuItemTimestamp.Enabled = m_Camera.IsOpened;
  56:       toolStripMenuItemApiErrorReport.Enabled = m_Camera.IsOpened;
  57:  
  58:       toolStripButtonFitToWnd.Checked = false;
  59:       toolStripButton1To1.Checked = false;
  60:       toolStripButton1To2.Checked = false;
  61:  
  62:       toolStripMenuItemFitToWindow.Checked = false;
  63:       toolStripMenuItem1To1.Checked = false;
  64:       toolStripMenuItem1To2.Checked = false;
  65:  
  66:       toolStripStatusLabelFPS.Visible = m_Camera.IsOpened;
  67:       toolStripStatusLabelFailed.Visible = m_Camera.IsOpened;
  68:       toolStripStatusLabelFrameCount.Visible = m_Camera.IsOpened;
  69:       toolStripStatusLabelCamera.Visible = m_Camera.IsOpened;
  70:  
  71:       if (m_Camera.IsOpened)
  72:       {
  73:            // update render mode
  74:            switch (m_RenderMode)
  75:            {
  76:                 case uEye.Defines.DisplayRenderMode.FitToWindow:
  77:                 toolStripButtonFitToWnd.Checked = true;
  78:                         toolStripMenuItemFitToWindow.Checked = true;
  79:                         break;
  80:  
  81:                     case uEye.Defines.DisplayRenderMode.Normal:
  82:                         toolStripButton1To1.Checked = true;
  83:                         toolStripMenuItem1To1.Checked = true;
  84:                         break;
  85:  
  86:                     case uEye.Defines.DisplayRenderMode.DownScale_1_2:
  87:                         toolStripButton1To2.Checked = true;
  88:                         toolStripMenuItem1To2.Checked = true;
  89:                         break;
  90:                 }
  91:  
  92:                 // update 
  93:                 Boolean isEnabled;
  94:                 m_Camera.AutoFeatures.Software.WhiteBalance.GetEnable(out isEnabled);
  95:                 toolStripButtonAWB.Checked = isEnabled;
  96:  
  97:                 m_Camera.AutoFeatures.Software.Shutter.GetEnable(out isEnabled);
  98:                 toolStripButtonAES.Checked = isEnabled;
  99:             }
 100:             else
 101:             {
 102:                 toolStripMenuItemCrosshair.Checked = false;
 103:                 toolStripMenuItemTimestamp.Checked = false;
 104:  
 105:                 toolStripButtonAES.Checked = false;
 106:                 toolStripButtonAWB.Checked = false;
 107:             }
 108:         }

image

四組使用者控制項 (1) CameraControl.cs  (2) FormatControl.cs (3) PictureControl.cs (4) SizeControl.cs

image

SettingsForm.cs

   1: private void InitSettingsList()
   2:     {
   3:         ListViewControlItem item;
   4:  
   5:         item = new ListViewControlItem();
   6:         item.Text = "Timing               ";
   7:         item.Value = new CameraControl(m_Camera);
   8:         item.ImageIndex = 0;
   9:         
  10:         listViewSettings.Items.Add(item);
  11:  
  12:         item = new ListViewControlItem();
  13:         item.Text = "Picture                    ";
  14:         item.Value = new PictureControl(m_Camera);
  15:         item.ImageIndex = 1;
  16:         listViewSettings.Items.Add(item);
  17:  
  18:         item = new ListViewControlItem();
  19:         item.Text = "Size                     ";
  20:         item.Value = m_SizeControl;
  21:         item.ImageIndex = 2;
  22:         listViewSettings.Items.Add(item);
  23:  
  24:         
  25:         item = new ListViewControlItem();
  26:         item.Text = "Format                         ";
  27:         item.Value = m_FormatControl;
  28:         item.ImageIndex = 3;
  29:         listViewSettings.Items.Add(item);
  30:  
  31:         listViewSettings.Items[0].Selected = true;
  32:         listViewSettings.FullRowSelect = true;
  33:         listViewSettings.HideSelection = false;
  34:     }

The ListViewControlItem, which inherits ListViewItem, can be added with an object by using a public method called Value.

The value used to saves a text, but now it is designed to save a object. The object can be a CameraControl, PictureControl, FormatControl or SizeControl, etc..

   1: public class ListViewControlItem : ListViewItem
   2:    {
   3:        public object Value { get; set; }
   4:    }

First we define a ListViewControlItem and name the variable name as item, and then a CameraControl object is stored in its value.

Corresponding to differernt object, the imageIndex of the item is changed automatically.

Finally, the item, which is called a CameraControl object, is added to listViewSettings.

   1: ListViewControlItem item;
   2:  
   3:            item = new ListViewControlItem();
   4:            item.Text = "Timing               ";
   5:            item.Value = new CameraControl(m_Camera);
   6:            item.ImageIndex = 0;
   7:            
   8:            listViewSettings.Items.Add(item);

Like above method mentioned before, we can add another item, which is called a PictureControl object, to listViewSettings.

   1: item = new ListViewControlItem();
   2: item.Text = "Picture                    ";
   3: item.Value = new PictureControl(m_Camera);
   4: item.ImageIndex = 1;
   5: listViewSettings.Items.Add(item);

Now, we continued to add another item, which is called m_SizeControl object, to listViewSettings.

One thing should be noticed, the m_SizeControl is initialized at the time of calling SettingsForm(camera).

m_SizeControl = new SizeControl(camera);

   1: item = new ListViewControlItem();
   2:   item.Text = "Size                     ";
   3:   item.Value = m_SizeControl;
   4:   item.ImageIndex = 2;
   5:   listViewSettings.Items.Add(item);

Finally, the last item is added, which is called m_FormatControl object, to  listViewSettings.

Similarly, m_Formated is initialized at the time of calling SettingsForm(camera),

m_FormatControl = new FormatControl(camera);

   1:  
   2:            item = new ListViewControlItem();
   3:            item.Text = "Format                         ";
   4:            item.Value = m_FormatControl;
   5:            item.ImageIndex = 3;
   6:            listViewSettings.Items.Add(item);

The constructor of FormatControl class

base(camera) means FormatControl subrotine to do the same job as IControl(uEye.Camera camera),

public IControl(uEye.Camera camera)
{
          m_Camera = camera;
}

   1: public FormatControl(uEye.Camera camera) 
   2:           : base(camera)
   3:       {
   4:           InitializeComponent();
   5:       }

For SizeControl constructor, it does the same job as IControl(uEye.Camera camera) does,

public SizeControl(uEye.Camera camera)
      : base(camera)
  {
      InitializeComponent();
  }

-------------------------------------------------------------------------------------

Now let us see the listViewSettings_SelectedIndexChanged event,

If m_ActiveControl is not empty, it means the object has been intantiated.

So we need to release old instance by calling OnControlFocusLost() method

and also dispose it by setting m_ActiveControl to null value.

   1: if (m_ActiveControl != null)
   2:            {
   3:                m_ActiveControl.OnControlFocusLost();
   4:                m_ActiveControl = null;
   5:            }

Then if listViewSettings.SelectedItems.Count is not zero, we may get the instance by this

m_ActiveControl = (IControl)(listViewSettings.SelectedItems[0] as ListViewControlItem).Value;

The selected item can be CameraControl, PictureControl, FormatControl or SizeControl.Because all of them inherit IControl.

First clean up the old object on Panel2.Controls, then add the current new selected item(m_ActiveControl) to it.

For better outlook, we may set the Dock property of m_ActiveControl to DockStyle.Fill.

Finally, call OnControlFocusAcitve(), which runs something when the instance is loaded on the panel.

   1: if (listViewSettings.SelectedItems.Count != 0)
   2:            {
   3:                m_ActiveControl = (IControl)(listViewSettings.SelectedItems[0] as ListViewControlItem).Value;
   4:  
   5:                if (m_ActiveControl != null)
   6:                {
   7:                    splitContainerMain.Panel2.Controls.Clear();
   8:                    splitContainerMain.Panel2.Controls.Add(m_ActiveControl);
   9:                    m_ActiveControl.Dock = DockStyle.Fill;
  10:  
  11:                    m_ActiveControl.OnControlFocusActive();
  12:                }
  13:            }

 

image

 

CameraControl.cs

image

If trackBarPixelclock is being focused and also scrolled, then we should set the pixle clock of m_Camera.

Furthermore, numericUpDownPixelclock value should be updated.

   1: private void trackBarPixelclock_Scroll(object sender, EventArgs e)
   2:         {
   3:             if (trackBarPixelclock.Focused)
   4:             {
   5:                 m_Camera.Timing.PixelClock.Set(trackBarPixelclock.Value);
   6:                 numericUpDownPixelclock.Value = trackBarPixelclock.Value;
   7:  
   8:                 UpdateFramerate();
   9:                 UpdateExposure();
  10:             }
  11:         }

Now we are ready to investigate UpdateFramerate.

uEye.Types.Range<Double> range   <--- it stores the range of minimum and maximum number of frame per second.

Int32 s32Steps = Convert.ToInt32((range.Maximum - range.Minimum) / range.Increment);

The number of steps is the differnce between max and min over incremnet size.

TrackBar.SetRange

trackBarFramerate.SetRange(0, s32Steps);

   1: private void UpdateFramerate()
   2:        {
   3:            uEye.Defines.Status statusRet;
   4:            uEye.Types.Range<Double> range;
   5:  
   6:            statusRet = m_Camera.Timing.Framerate.GetFrameRateRange(out range);
   7:  
   8:            labelFramerateMin.Text = Math.Round(range.Minimum, 2) + " fps";
   9:            labelFramerateMax.Text = Math.Round(range.Maximum, 2) + " fps";
  10:  
  11:            Int32 s32Steps = Convert.ToInt32((range.Maximum - range.Minimum) / range.Increment);
  12:            trackBarFramerate.SetRange(0, s32Steps);
  13:  
  14:            numericUpDownFramerate.Minimum = Convert.ToDecimal(range.Minimum);
  15:            numericUpDownFramerate.Maximum = Convert.ToDecimal(range.Maximum);
  16:  
  17:            Double dValue;
  18:            statusRet = m_Camera.Timing.Framerate.Get(out dValue);
  19:  
  20:            numericUpDownFramerate.Value = Convert.ToDecimal(dValue);
  21:            Int32 s32Value = Convert.ToInt32((dValue - range.Minimum) / range.Increment);
  22:  
  23:            trackBarFramerate.Value = s32Value;
  24:  
  25:            if (checkBoxFramerateMax.Checked)
  26:            {
  27:                m_Camera.Timing.Framerate.Set(Convert.ToDouble(numericUpDownFramerate.Maximum));
  28:  
  29:                numericUpDownFramerate.Value = numericUpDownFramerate.Maximum;
  30:                trackBarFramerate.Value = trackBarFramerate.Maximum;
  31:            }
  32:        }

To get the current frame rate by calling m_Camera.Timing.Framerate.Get( out dValue);

   1: Double dValue;
   2: statusRet = m_Camera.Timing.Framerate.Get(out dValue);
   3: numericUpDownFramerate.Value = Convert.ToDecimal(dValue);
   4: Int32 s32Value = Convert.ToInt32((dValue - range.Minimum) / range.Increment);
   5:  
   6: trackBarFramerate.Value = s32Value;

It is obviously that we shoold set the range of trackbar before set its value. Otherwise, there would be an error message.

If the checkBoxFramerateMax is checked by user, then it means that the maximum frame rate is used.

   1: if (checkBoxFramerateMax.Checked)
   2:   {
   3:       m_Camera.Timing.Framerate.Set(Convert.ToDouble(numericUpDownFramerate.Maximum));
   4:  
   5:       numericUpDownFramerate.Value = numericUpDownFramerate.Maximum;
   6:       trackBarFramerate.Value = trackBarFramerate.Maximum;
   7:   }

----------------------------------------------------------------------

Now we continue to see UpdateExposure subroutine. The function is much similar to UpdateFramerate subroutine.

   1: private void UpdateExposure()
   2:        {
   3:            uEye.Defines.Status statusRet;
   4:            uEye.Types.Range<Double> range;
   5:  
   6:            if (!checkBoxFineIncrement.Checked)
   7:            {
   8:                statusRet = m_Camera.Timing.Exposure.GetRange(out range);
   9:            }
  10:            else
  11:            {
  12:                statusRet = m_Camera.Timing.Exposure.Fine.GetRange(out range);
  13:            }
  14:  
  15:            labelExposureMin.Text = Math.Round(range.Minimum, 2) + " ms";
  16:            labelExposureMax.Text = Math.Round(range.Maximum, 2) + " ms";
  17:  
  18:            numericUpDownExposure.Minimum = Convert.ToDecimal(range.Minimum);
  19:            numericUpDownExposure.Maximum = Convert.ToDecimal(range.Maximum);
  20:  
  21:            // trackbar range
  22:            Int32 s32Step = Convert.ToInt32((range.Maximum - range.Minimum) / range.Increment + 0.0005);
  23:            trackBarExposure.SetRange(0, s32Step);
  24:  
  25:            Double dValue;
  26:            statusRet = m_Camera.Timing.Exposure.Get(out dValue);
  27:            numericUpDownExposure.Value = Convert.ToDecimal(dValue) > numericUpDownExposure.Maximum ? numericUpDownExposure.Maximum : Convert.ToDecimal(dValue);
  28:  
  29:            Int32 s32Value = Convert.ToInt32((dValue - range.Minimum) / range.Increment + 0.0005);
  30:            trackBarExposure.Value = s32Value > trackBarExposure.Maximum ? trackBarExposure.Maximum : s32Value;
  31:  
  32:            if (checkBoxExposureMax.Checked)
  33:            {
  34:                m_Camera.Timing.Exposure.Set(Convert.ToDouble(numericUpDownExposure.Maximum));
  35:  
  36:                numericUpDownExposure.Value = numericUpDownExposure.Maximum;
  37:                trackBarExposure.Value = trackBarExposure.Maximum;
  38:            }
  39:        }

Now we are going to focus on trackBarFrame_Scroll event

we should check the range of camera frame rate before setting the trackBarFramerate value.

If dValue is larger range.Maximum, then is is limited by the maximum value.

After checking this we update numericUpDownFramerate value and also modify famerate of m_Camera.

Lastly, UpdateExposure subroutine is activated.

   1: private void trackBarFramerate_Scroll(object sender, EventArgs e)
   2:        {
   3:            if (trackBarFramerate.Focused)
   4:            {
   5:                uEye.Defines.Status statusRet;
   6:                uEye.Types.Range<Double> range;
   7:  
   8:                statusRet = m_Camera.Timing.Framerate.GetFrameRateRange(out range);
   9:                Double dValue = range.Minimum + trackBarFramerate.Value * range.Increment;
  10:  
  11:                if(dValue > range.Maximum)
  12:                {
  13:                    dValue = range.Maximum;
  14:                }
  15:  
  16:                // update numeric
  17:                numericUpDownFramerate.Value = Convert.ToDecimal(dValue);
  18:  
  19:                // set framerate
  20:                statusRet = m_Camera.Timing.Framerate.Set(dValue);
  21:  
  22:                // update exposure
  23:                UpdateExposure();
  24:            }
  25:        }

Now here is trackBarExposure_Scroll event

   1: private void trackBarExposure_Scroll(object sender, EventArgs e)
   2:        {
   3:            if (trackBarExposure.Focused)
   4:            {
   5:                uEye.Defines.Status statusRet;
   6:                uEye.Types.Range<Double> range;
   7:  
   8:                statusRet = m_Camera.Timing.Exposure.GetRange(out range);
   9:  
  10:                // calculate exposure
  11:                Double dValue = range.Minimum + trackBarExposure.Value * range.Increment;
  12:  
  13:                // update numeric
  14:                numericUpDownExposure.Value = Convert.ToDecimal(dValue > range.Maximum ? 
  15:                    Convert.ToDecimal(range.Maximum) : Convert.ToDecimal(dValue));
  16:  
  17:                // set exposure
  18:                statusRet = m_Camera.Timing.Exposure.Set(dValue);
  19:            }
  20:        }

UpdateBandwidth

   1: private void UpdateBandwidth()
   2:   {
   3:       Double f64PeakBandwidth;
   4:       m_Camera.Information.GetPeakBandwidth(out f64PeakBandwidth);
   5:       labelCameraPeak.Text = Math.Round(f64PeakBandwidth, 2) + " MB/s";
   6:  
   7:       Double f64AvgBandwidth;
   8:       m_Camera.Information.GetAvgBandwidth(out f64AvgBandwidth);
   9:       labelCameraAvg.Text = Math.Round(f64AvgBandwidth, 2) + " MB/s";
  10:  
  11:       Int32 s32SensorBandwidth;
  12:       m_Camera.Timing.PixelClock.Get(out s32SensorBandwidth);
  13:       labelSensorBandwidth.Text = s32SensorBandwidth + " Mp/s";
  14:   }

We are now to take a look on OnControlFocusActive, following is OnControlFocusLost

four subrountines are being run sequencially, which areUpdatePixelclock, UpdateFramerate, UpateExposure and UpdateBandwidth.

   1: public override void OnControlFocusActive()
   2:       {
   3:           UpdatePixelclock();
   4:           UpdateFramerate();
   5:           UpdateExposure();
   6:           UpdateBandwidth();
   7:  
   8: // check supported
   9:            checkBoxFineIncrement.Enabled = m_Camera.Timing.Exposure.Fine.Supported;
  10:  
  11:            // check enabled
  12:            Boolean isEnabled;
  13:            m_Camera.AutoFeatures.Software.Shutter.GetEnable(out isEnabled);
  14:            checkBoxExposureAuto.Checked = isEnabled;
  15:  
  16:            checkBoxFramerateAuto.Enabled = checkBoxExposureAuto.Checked;
  17:            if (checkBoxExposureAuto.Checked)
  18:            {
  19:                m_Camera.AutoFeatures.Software.Framerate.GetEnable(out isEnabled);
  20:                checkBoxFramerateAuto.Checked = isEnabled;
  21:            }
  22:  
  23:            m_UpdateTimer.Start();
  24:        }

Stop the m_UpdateTimer if the object OnControlFocusLost event happens.

   1: public override void OnControlFocusLost()
   2: {
   3:     m_UpdateTimer.Stop();
   4: }
arrow
arrow
    全站熱搜

    me1237guy 發表在 痞客邦 留言(0) 人氣()