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

📄 pagecam.cpp

📁 机器人处理中使用USB摄像机的例子程序.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// PageCam.cpp : implementation file
//

#include "stdafx.h"
#include "UsbCam.h"
#include "PageCam.h"
#include "Utils.h"
#include "Image.h"
#include "DlgRGBChan.h"
#include "SheetCtrl.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPageCam property page

IMPLEMENT_DYNCREATE(CPageCam, CPropertyPage)

CPageCam::CPageCam() : CPropertyPage(CPageCam::IDD)
{
	//{{AFX_DATA_INIT(CPageCam)
	m_filename = _T("");
	m_chk_auto_inc = FALSE;
	m_chk_bright = FALSE;
	m_chk_hue = FALSE;
	m_chk_filter = FALSE;
	m_s_cyan = 0;
	m_s_contrast = 0;
	m_s_expo = 0;
	m_s_bright = 0;
	m_s_light = 0;
	m_s_saturation = 0;
	m_s_video = 0;
	m_s_yel = 0;
	m_chk_mirror = FALSE;
	m_chk_flip = FALSE;
	m_edit_filename = _T("");
	m_chk_smart = FALSE;
	//}}AFX_DATA_INIT

	m_pCurImg = new CImage (10,10,3);
}

CPageCam::~CPageCam()
{
	
}

void CPageCam::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPageCam)
	DDX_Control(pDX, IDC_SLIDER_YELBLUE, m_slider_yel);
	DDX_Control(pDX, IDC_SLIDER_VIDEO_QUALITY, m_slider_video);
	DDX_Control(pDX, IDC_SLIDER_SATURATION, m_slider_saturation);
	DDX_Control(pDX, IDC_SLIDER_LIGHTSENS, m_slider_light);
	DDX_Control(pDX, IDC_SLIDER_EXPOTIME, m_slider_expo);
	DDX_Control(pDX, IDC_SLIDER_CYANRED, m_slider_cyan);
	DDX_Control(pDX, IDC_SLIDER_CONTRAST, m_slider_contrast);
	DDX_Control(pDX, IDC_SLIDER_BRIGHTNESS, m_slider_bright);
	DDX_Control(pDX, IDC_BUTTON_ENABLE_VIDEO, m_but_enable);
	DDX_Control(pDX, IDC_QCVIDEOXCTRL, m_VideoFrame);
	DDX_Text(pDX, IDC_EDIT_FILENAME, m_filename);
	DDX_Check(pDX, IDC_CHECK_AUTO_INC, m_chk_auto_inc);
	DDX_Check(pDX, IDC_CHECK_AUTO_BRIGHTNESS, m_chk_bright);
	DDX_Check(pDX, IDC_CHECK_AUTO_HUE, m_chk_hue);
	DDX_Check(pDX, IDC_CHECK_LOW_LIGHT, m_chk_filter);
	DDX_Text(pDX, IDC_EDIT_CIAND_RED, m_s_cyan);
	DDV_MinMaxInt(pDX, m_s_cyan, 0, 255);
	DDX_Text(pDX, IDC_EDIT_CONTRAST, m_s_contrast);
	DDV_MinMaxInt(pDX, m_s_contrast, 0, 255);
	DDX_Text(pDX, IDC_EDIT_EXPO_TIME, m_s_expo);
	DDV_MinMaxInt(pDX, m_s_expo, 0, 255);
	DDX_Text(pDX, IDC_EDIT_BRIGHTNESS, m_s_bright);
	DDV_MinMaxInt(pDX, m_s_bright, 0, 255);
	DDX_Text(pDX, IDC_EDIT_LIGHT_SENS, m_s_light);
	DDV_MinMaxInt(pDX, m_s_light, 0, 255);
	DDX_Text(pDX, IDC_EDIT_SATURATION, m_s_saturation);
	DDV_MinMaxInt(pDX, m_s_saturation, 0, 255);
	DDX_Text(pDX, IDC_EDIT_VIDEO_QUAL, m_s_video);
	DDV_MinMaxInt(pDX, m_s_video, 0, 4);
	DDX_Text(pDX, IDC_EDIT_YEL_BLUE, m_s_yel);
	DDV_MinMaxInt(pDX, m_s_yel, 0, 255);
	DDX_Check(pDX, IDC_CHECK_MIRROR, m_chk_mirror);
	DDX_Check(pDX, IDC_CHECK_FLIP, m_chk_flip);
	DDX_Text(pDX, IDC_STATIC_FILENAME, m_edit_filename);
	DDX_Check(pDX, IDC_CHECK_PICTURE_SMART, m_chk_smart);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPageCam, CPropertyPage)
	//{{AFX_MSG_MAP(CPageCam)
	ON_BN_CLICKED(IDC_BUTTON_ENABLE_VIDEO, OnButtonEnableVideo)
	ON_BN_CLICKED(IDC_BUTTON_DIM, OnButtonDim)
	ON_BN_CLICKED(IDC_BUTTON_TAKE_PICTURE, OnButtonTakePicture)
	ON_BN_CLICKED(IDC_CHECK_AUTO_INC, OnCheckAutoInc)
	ON_BN_CLICKED(IDC_BUTTON_SETTINGS, OnButtonSettings)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_CHECK_AUTO_HUE, OnCheckAutoHue)
	ON_EN_CHANGE(IDC_EDIT_CIAND_RED, OnChangeEditCiandRed)
	ON_EN_CHANGE(IDC_EDIT_YEL_BLUE, OnChangeEditYelBlue)
	ON_EN_CHANGE(IDC_EDIT_CONTRAST, OnChangeEditContrast)
	ON_EN_CHANGE(IDC_EDIT_EXPO_TIME, OnChangeEditExpoTime)
	ON_EN_CHANGE(IDC_EDIT_FILENAME, OnChangeEditFilename)
	ON_EN_CHANGE(IDC_EDIT_LIGHT_SENS, OnChangeEditLightSens)
	ON_EN_CHANGE(IDC_EDIT_SATURATION, OnChangeEditSaturation)
	ON_EN_CHANGE(IDC_EDIT_VIDEO_QUAL, OnChangeEditVideoQual)
	ON_EN_CHANGE(IDC_EDIT_BRIGHTNESS, OnChangeEditBrightness)
	ON_BN_CLICKED(IDC_BUTTON_DEFAULT, OnButtonDefault)
	ON_BN_CLICKED(IDC_CHECK_AUTO_BRIGHTNESS, OnCheckAutoBrightness)
	ON_BN_CLICKED(IDC_CHECK_LOW_LIGHT, OnCheckLowLight)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_CHECK_MIRROR, OnCheckMirror)
	ON_BN_CLICKED(IDC_CHECK_FLIP, OnCheckFlip)
	ON_BN_CLICKED(IDC_BUTTON_DISPLAY_PICTURE, OnButtonDisplayPicture)
	ON_BN_CLICKED(IDC_BUTTON_DISPLAY_CHANNELS, OnButtonDisplayChannels)
	ON_BN_CLICKED(IDC_CHECK_PICTURE_SMART, OnCheckPictureSmart)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPageCam message handlers

BOOL CPageCam::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();

	m_pict_count = 0;

	// Initialization of m_dc
	m_dc = new CClientDC(this);
	
	// Restore defaults
	Read_Registry();

	// Assign pointers on sliders
	pslider_cyan	= GetDlgItem(IDC_SLIDER_CYANRED);
	pslider_yel		= GetDlgItem(IDC_SLIDER_YELBLUE);
	pslider_saturation = GetDlgItem(IDC_SLIDER_SATURATION);
	pslider_bright  = GetDlgItem(IDC_SLIDER_BRIGHTNESS);
	pslider_contrast = GetDlgItem(IDC_SLIDER_CONTRAST);
	pslider_expo	= GetDlgItem(IDC_SLIDER_EXPOTIME);
	pslider_light	= GetDlgItem(IDC_SLIDER_LIGHTSENS);
	pslider_video	= GetDlgItem(IDC_SLIDER_VIDEO_QUALITY);
	
	// Write default values
	m_VideoFrame.UnInitialization();
	if (m_VideoFrame.Initialization (0)) m_bInit = TRUE;
	else m_bInit = FALSE;
	Sleep (200);

	m_VideoFrame.SetColorMode	   ((short) m_chk_hue);
	if (m_chk_hue)
	{
		if (!SetTimer (TIMER_HUE,INTERVAL,NULL)) AfxMessageBox (COULD_NOT_START_UP_TIMER);
	}
	m_VideoFrame.SetBrightnessMode ((short) m_chk_bright);
	if (m_chk_bright)
	{
		if (!SetTimer (TIMER_BRIGHT,INTERVAL,NULL)) AfxMessageBox (COULD_NOT_START_UP_TIMER);
	}
	if ((m_chk_mirror)  && (!m_chk_flip)) m_VideoFrame.SetOrientation (1);
	if ((m_chk_mirror)  && (m_chk_flip))  m_VideoFrame.SetOrientation (3);
	if ((!m_chk_mirror) && (!m_chk_flip)) m_VideoFrame.SetOrientation (0);
	if ((!m_chk_mirror) && (m_chk_flip))  m_VideoFrame.SetOrientation (2);
	
	m_VideoFrame.SetLowLightFilter (m_chk_filter);
	m_VideoFrame.SetCyanRedColor   (m_s_cyan);
	m_VideoFrame.SetYellowBlueColor (m_s_yel);
	m_VideoFrame.SetSaturation  (m_s_saturation);
	m_VideoFrame.SetBrightnessMagnitude (m_s_bright);
	m_VideoFrame.SetContrastMagnitude (m_s_contrast);

	m_VideoFrame.SetExposure (m_s_expo);
	m_VideoFrame.SetCompression (m_s_video);
	m_VideoFrame.SetGain (m_s_light);

	// Init the sliders
	m_slider_bright.SetRangeMin (0,FALSE);
	m_slider_bright.SetRangeMax (255,TRUE);
	m_slider_bright.SetTicFreq(20);

	m_slider_contrast.SetRangeMin (0,FALSE);
	m_slider_contrast.SetRangeMax (255,TRUE);
	m_slider_contrast.SetTicFreq(20);

	m_slider_cyan.SetRangeMin (0,FALSE);
	m_slider_cyan.SetRangeMax (255,TRUE);
	m_slider_cyan.SetTicFreq(20);

	m_slider_expo.SetRangeMin (0,FALSE);
	m_slider_expo.SetRangeMax (255,TRUE);
	m_slider_expo.SetTicFreq(20);

	m_slider_light.SetRangeMin (0,FALSE);
	m_slider_light.SetRangeMax (255,TRUE);
	m_slider_light.SetTicFreq(20);

	m_slider_saturation.SetRangeMin (0,FALSE);
	m_slider_saturation.SetRangeMax (255,TRUE);
	m_slider_saturation.SetTicFreq(20);

	m_slider_video.SetRangeMin (0,FALSE);
	m_slider_video.SetRangeMax (4,TRUE);
	m_slider_video.SetPos (m_s_video);
	m_slider_video.SetTicFreq(1);

	m_slider_yel.SetRangeMin (0,FALSE);
	m_slider_yel.SetRangeMax (255,TRUE);
	m_slider_yel.SetTicFreq(20);

	// Update groups and fields
	UpdateAll();
	m_filename = "Picture";
	m_filename.Format ("%s%i", m_filename, m_pict_count);
	UpdateData (FALSE);

	// Enable or disable video
	m_bLive = !m_bLive;
	CPageCam::OnButtonEnableVideo();

	UpdateData (FALSE);
	
	return TRUE;  
}

void CPageCam::OnDestroy() 
{
	CPropertyPage::OnDestroy();
	
	m_VideoFrame.UnInitialization();
	Store_Registry();
}

BOOL CPageCam::PreTranslateMessage(MSG* pMsg) 
{
	if ((pMsg->message == WM_LBUTTONUP) || (pMsg->message == WM_MOUSEMOVE))
	{
		CWnd* pfocus = GetFocus();
		
		if (pslider_cyan == pfocus)
		{
			m_s_cyan = m_slider_cyan.GetPos();
			m_VideoFrame.SetCyanRedColor (m_s_cyan);
			UpdateData (FALSE);
		}
		else
		if (pslider_yel == pfocus)
		{
			m_s_yel = m_slider_yel.GetPos();
			m_VideoFrame.SetYellowBlueColor (m_s_yel);
			UpdateData (FALSE);
		}
		else
		if (pslider_saturation == pfocus)
		{
			m_s_saturation = m_slider_saturation.GetPos();
			m_VideoFrame.SetSaturation (m_s_saturation);
			UpdateData (FALSE);
		}
		else
		if (pslider_bright == pfocus)
		{
			m_s_bright = m_slider_bright.GetPos();
			m_VideoFrame.SetBrightnessMagnitude (m_s_bright);
			UpdateData (FALSE);
		}
		else
		if (pslider_contrast == pfocus)
		{
			m_s_contrast = m_slider_contrast.GetPos();
			m_VideoFrame.SetContrastMagnitude (m_s_contrast);
			UpdateData (FALSE);
		}
		else
		if (pslider_expo == pfocus)
		{
			m_s_expo = m_slider_expo.GetPos();
			m_VideoFrame.SetExposure (m_s_expo);
			UpdateData (FALSE);
		}
		else
		if (pslider_light == pfocus)
		{
			m_s_light = m_slider_light.GetPos();
			m_VideoFrame.SetGain (m_s_light);
			UpdateData (FALSE);
		}
		else
		if (pslider_video == pfocus)
		{
			m_s_video = m_slider_video.GetPos();
			m_VideoFrame.SetCompression (m_s_video);
			UpdateData (FALSE);
		}
	}

	return CPropertyPage::PreTranslateMessage(pMsg);
}

void CPageCam::OnTimer(UINT nIDEvent) 
{
	switch (nIDEvent)
	{
		case TIMER_HUE :
			UpdateHueGroup();
			break;

		case TIMER_BRIGHT :
			UpdateBrightGroup();
			break;

		default : break;
	}
	CPropertyPage::OnTimer(nIDEvent);
}

//*****************************************
//*  Update procedures					  *
//*****************************************
void CPageCam::UpdateHueGroup()
{
	short tmp;
	
	UpdateData (TRUE);
	m_VideoFrame.GetCyanRedColor (&m_s_cyan);
	m_slider_cyan.SetPos (m_s_cyan);
	m_VideoFrame.GetYellowBlueColor (&m_s_yel);
	m_slider_yel.SetPos (m_s_yel);
	m_VideoFrame.GetSaturation (&m_s_saturation);
	m_slider_saturation.SetPos (m_s_saturation);

	m_VideoFrame.GetColorMode (&tmp);
	if (m_chk_hue = BOOL (tmp))
	{
		GetDlgItem(IDC_SLIDER_CYANRED)->EnableWindow(FALSE);
		GetDlgItem(IDC_SLIDER_YELBLUE)->EnableWindow(FALSE);
		GetDlgItem(IDC_EDIT_CIAND_RED)->EnableWindow(FALSE);
		GetDlgItem(IDC_EDIT_YEL_BLUE)->EnableWindow(FALSE);
	}
	else
	{
		GetDlgItem(IDC_SLIDER_CYANRED)->EnableWindow(TRUE);
		GetDlgItem(IDC_SLIDER_YELBLUE)->EnableWindow(TRUE);
		GetDlgItem(IDC_EDIT_CIAND_RED)->EnableWindow(TRUE);
		GetDlgItem(IDC_EDIT_YEL_BLUE)->EnableWindow(TRUE);
	}

	UpdateData (FALSE);
}


void CPageCam::UpdateBrightGroup()
{
	short tmp;
	
	UpdateData (TRUE);
	m_VideoFrame.GetBrightnessMagnitude (&m_s_bright);
	m_slider_bright.SetPos (m_s_bright);
	m_VideoFrame.GetContrastMagnitude (&m_s_contrast);
	m_slider_contrast.SetPos (m_s_contrast);
	m_VideoFrame.GetExposure(&m_s_expo);
	m_slider_expo.SetPos (m_s_expo);
	m_VideoFrame.GetGain (&m_s_light);
	m_slider_light.SetPos (m_s_light);

	m_VideoFrame.GetBrightnessMode (&tmp);
	if (m_chk_bright = BOOL (tmp))
	{
		GetDlgItem(IDC_SLIDER_BRIGHTNESS)->EnableWindow(FALSE);
		GetDlgItem(IDC_SLIDER_EXPOTIME)->EnableWindow(FALSE);
		GetDlgItem(IDC_EDIT_BRIGHTNESS)->EnableWindow(FALSE);
		GetDlgItem(IDC_EDIT_EXPO_TIME)->EnableWindow(FALSE);
		GetDlgItem(IDC_EDIT_LIGHT_SENS)->EnableWindow(FALSE);
		GetDlgItem(IDC_SLIDER_LIGHTSENS)->EnableWindow(FALSE);
	}

⌨️ 快捷键说明

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