⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 camerafeatureview.cpp

📁 BCAM 1394 Driver
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        enable = true;
    }

    if ( m_pCamera == NULL )
    {
      ::EnableWindow(GetDlgItem(IDC_EDITVALUEU), enable);
      ::EnableWindow(GetDlgItem(IDC_EDITVALUEV), enable);
      ::EnableWindow(GetDlgItem(IDC_SLIDERU), enable);
      ::EnableWindow(GetDlgItem(IDC_SLIDERV), enable);
    }
    else
    {
        m_EditCtrlU.EnableWindow(enable);
        m_EditCtrlV.EnableWindow(enable);
    }
    ::EnableWindow(GetDlgItem(IDC_STATICNAMEU), enable);
    ::EnableWindow(GetDlgItem(IDC_STATICMINU), enable);
    ::EnableWindow(GetDlgItem(IDC_STATICMAXU), enable);
    ::EnableWindow(GetDlgItem(IDC_STATICNAMEV), enable);
    ::EnableWindow(GetDlgItem(IDC_STATICMINV), enable);
    ::EnableWindow(GetDlgItem(IDC_STATICMAXV), enable);
    return 0;
}

LRESULT CWhiteBalanceView::OnValueChanged(WPARAM uNotifyCode, WPARAM wID, HWND hWndCtrl, BOOL& bHandled)
{
  if ( m_pCamera != NULL )
  {

    int newVal = m_EditCtrlU.GetValue();
    if ( m_pCamera->IsWhiteBalanceSupported() )
      m_pCamera->WhiteBalance.Raw.UBValue.SetAsync(newVal);
    else
      m_pCamera->SetBGain(newVal / 100.0);
    newVal = m_EditCtrlV.GetValue();
    if ( m_pCamera->IsWhiteBalanceSupported() )
      m_pCamera->WhiteBalance.Raw.VRValue.SetAsync(newVal);
    else
      m_pCamera->SetRGain(newVal / 100.0);
  }

  return 0;
}

//////////////////////////////////////////////////////////////////////
// Public member functions
//////////////////////////////////////////////////////////////////////

void CWhiteBalanceView::OnConfigurationChanged(DCSVideoFormat format, DCSVideoMode mode, DCSVideoFrameRate rate, DCSColorCode code)
{
  try
  {
    if ( m_pCamera != NULL ) 
    {
      bool isWhiteBalanceAutoControlSupported = m_pCamera->WhiteBalance.IsSupported() && m_pCamera->WhiteBalance.IsSupported(inqAuto);

      if ( m_pCamera->IsWhiteBalanceSupported() || m_pCamera->IsBayerConversionEnabled()  ) 
      {
        if ( isWhiteBalanceAutoControlSupported )
          m_pCamera->WhiteBalance.AutoMode = false;
        EnableWindow(TRUE);
        RefreshControl();
      }
      else
      {
        EnableWindow(FALSE);
      }
    }
  }
  catch ( BcamException& e)
  {
    EnableWindow(FALSE);
    throw e;
  }
}

//////////////////////////////////////////////////////////////////////
// Protected/ private member functions
//////////////////////////////////////////////////////////////////////

void CWhiteBalanceView::InitControl()
{
  m_EditCtrlU.Attach(this, IDC_EDITVALUEU, IDC_SLIDERU);
  m_EditCtrlU.AttachTextCtrls(IDC_STATICMINU, IDC_STATICMAXU);
  m_EditCtrlV.Attach(this, IDC_EDITVALUEV, IDC_SLIDERV);
  m_EditCtrlV.AttachTextCtrls(IDC_STATICMINV, IDC_STATICMAXV);
  m_EditCtrlU.WantReturn(true);
  m_EditCtrlV.WantReturn(true);
  m_EditCtrlU.PostMsgEnable(true);
  m_EditCtrlV.PostMsgEnable(true);
  m_EditCtrlU.SetKillFocus(true);
  m_EditCtrlV.SetKillFocus(true);
  m_EditCtrlU.LiveUpdateEnable(true);
  m_EditCtrlV.LiveUpdateEnable(true);
}

void CWhiteBalanceView::RefreshControl()
{
  assert ( m_pCamera != NULL );
  unsigned long min; 
  unsigned long max;

  if ( ! m_pCamera->IsWhiteBalanceSupported()  )
  {
    assert(m_pCamera->IsBayerConversionEnabled());
    min = 10;
    max = 500;
  }
  else
  {
    min = m_pCamera->WhiteBalance.Raw.Min();  
    max = m_pCamera->WhiteBalance.Raw.Max();
  }

  m_EditCtrlU.PostMsgEnable(false);
  m_EditCtrlU.SetRange(min, max);

  if ( ! m_pCamera->IsWhiteBalanceSupported() )
  {
    ::SetWindowText(GetDlgItem(IDC_STATICNAMEU), "B");
    m_EditCtrlU.SetValue(m_pCamera->GetBGain() * 100);
  }
  else
  {
    ::SetWindowText(GetDlgItem(IDC_STATICNAMEU), "U");
    m_EditCtrlU.SetValue(m_pCamera->WhiteBalance.Raw.UBValue());
  }
  m_EditCtrlU.PostMsgEnable(true);

  m_EditCtrlV.PostMsgEnable(false);
  m_EditCtrlV.SetRange(min, max);
  if ( ! m_pCamera->IsWhiteBalanceSupported() )
  {
    ::SetWindowText(GetDlgItem(IDC_STATICNAMEV), "R");
    m_EditCtrlV.SetValue(m_pCamera->GetRGain() * 100);
  }
  else
  {
    ::SetWindowText(GetDlgItem(IDC_STATICNAMEV), "V");
     m_EditCtrlV.SetValue(m_pCamera->WhiteBalance.Raw.VRValue());
  }
  m_EditCtrlV.PostMsgEnable(true);
}

void CWhiteBalanceView::SetVRValue(long vr) 
{
  m_EditCtrlV.SetValue(vr);
}

void CWhiteBalanceView::SetUBValue(long ub) 
{
  m_EditCtrlU.SetValue(ub);
}

void CWhiteBalanceView::PostMsgEnable(bool enable)
{
  m_EditCtrlU.PostMsgEnable(enable);
  m_EditCtrlV.PostMsgEnable(enable);
}



//////////////////////////////////////////////////////////////////////
//
// class CBytePerPacketView
//
//

//////////////////////////////////////////////////////////////////////
// Message Handlers
//////////////////////////////////////////////////////////////////////

LRESULT CBytePerPacketView::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
  ::SetWindowText(GetDlgItem(IDC_STATICNAME), "Bytes/Pkt" );
  InitControl();
  return 0;
}

LRESULT CBytePerPacketView::OnEnable(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    BOOL enable = false;
    if ( wParam ) // Window has been enabled
    {
      
      if ( m_pCamera != NULL )
      {
        DCSVideoFormat format;
        m_pCamera->GetVideoMode(&format, NULL, NULL);
        if ( format == DCS_Format7 )
          enable = true;
      }
    }

    if ( m_pCamera == NULL )
    {
      ::EnableWindow(GetDlgItem(IDC_EDITVALUE), enable);
      ::EnableWindow(GetDlgItem(IDC_SLIDER), enable);
    }
    m_EditCtrl.EnableWindow(enable);
    ::EnableWindow(GetDlgItem(IDC_STATICNAME), enable);
    ::EnableWindow(GetDlgItem(IDC_STATICMIN), enable);
    ::EnableWindow(GetDlgItem(IDC_STATICMAX), enable);
    return 0;
}

LRESULT CBytePerPacketView::OnValueChanged(WPARAM uNotifyCode, WPARAM wID, HWND hWndCtrl, BOOL& bHandled)
{
  if ( m_pCamera == NULL )
    return 0;

  int bpp = m_EditCtrl.GetValue();

  if ( bpp % m_Inc )
  {
    bpp = __max ( m_Inc * ( bpp / m_Inc ), m_Inc);
    m_EditCtrl.SetValue(bpp);  // this will cause a further call to OnValueChanged
    return 0;
  }
  
  DCSVideoFormat format;
  DCSVideoMode mode;
  m_pCamera->GetVideoMode(&format, &mode, NULL);
  assert ( format == DCS_Format7 );

  if ( m_pCamera->ReconfigurationRequest() )
  {
    m_pCamera->FormatSeven[mode].BytePerPacket = m_EditCtrl.GetValue();
    // ensure, that the camera has accepted our value. If not, update the edit control
    unsigned long read = m_pCamera->FormatSeven[mode].BytePerPacket();
    if ( read != m_EditCtrl.GetValue() )
    {
      m_EditCtrl.PostMsgEnable(false);
      m_EditCtrl.SetValue(read);
      m_EditCtrl.PostMsgEnable(true);
    }
    m_pCamera->ConfigurationChanged();
  }
  return 0;
}

//////////////////////////////////////////////////////////////////////
// Public member functions
//////////////////////////////////////////////////////////////////////


void CBytePerPacketView::OnConfigurationChanged(DCSVideoFormat format, DCSVideoMode mode, DCSVideoFrameRate rate, DCSColorCode code)
{
  if ( m_pCamera != NULL )
  {
    if ( DCS_Format7 == format )
    {
      EnableWindow(TRUE);
      RefreshControl();
    }
    else
    {
      EnableWindow(FALSE);
    }
  }
}

//////////////////////////////////////////////////////////////////////
// Protected/ private member functions
//////////////////////////////////////////////////////////////////////

void CBytePerPacketView::InitControl()
{
  m_EditCtrl.Attach(this, IDC_EDITVALUE, IDC_SLIDER);
  m_EditCtrl.WantReturn(true);
  m_EditCtrl.SetKillFocus(true);
  m_EditCtrl.LiveUpdateEnable(false);
  m_EditCtrl.AttachTextCtrls(IDC_STATICMIN, IDC_STATICMAX);
  m_EditCtrl.PostMsgEnable(true);
}

void CBytePerPacketView::RefreshControl()
{
  assert ( m_pCamera != NULL );

  DCSVideoFormat format;
  DCSVideoMode mode;
  m_pCamera->GetVideoMode(&format, &mode, NULL);
  assert ( DCS_Format7 == format );

  m_EditCtrl.PostMsgEnable(false);
  m_Inc = lcm(m_pCamera->FormatSeven[mode].BytePerPacket.Inc(), 4);
  m_EditCtrl.SetLineSize(m_Inc);
  m_Max =  m_Inc * ( m_pCamera->FormatSeven[mode].BytePerPacket.Max() / m_Inc );
  assert ( m_Max >= m_Inc );

  // our cameras don't allow more than 4095 packets per frame. -> calculate according minimum
  m_Min = m_Inc * ( ( ( (m_pCamera->FormatSeven[mode].BytePerFrame() + 4094 ) / 4095) + m_Inc - 1 ) / m_Inc );
  m_Min = __max( m_Min, m_Inc);

  m_EditCtrl.SetRange(m_Min, m_Max);

  int bpp = m_pCamera->FormatSeven[mode].BytePerPacket();
  if ( bpp > m_Max ) 
  {
    bpp = m_Max / m_Inc;
    m_pCamera->FormatSeven[mode].BytePerPacket = bpp;
  }
  else if ( bpp < m_Min )
  {
    bpp = __max( m_Inc,  m_Min );
    m_pCamera->FormatSeven[mode].BytePerPacket = bpp;
  }
  else if ( bpp % m_Inc )
  {
    bpp = __max( m_Min, ( bpp / m_Inc ) * m_Inc );
    m_pCamera->FormatSeven[mode].BytePerPacket = bpp;
  }
  m_EditCtrl.SetValue( bpp );
  m_EditCtrl.PostMsgEnable(true);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -