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

📄 videoconfiguredlg.cpp

📁 机器人视觉处理程序
💻 CPP
字号:
// VideoConfigureDlg.cpp : implementation file
//

#include "stdafx.h"
#include "IRExpPlatform.h"
#include "VideoConfigureDlg.h"
#include "WalkWhiteDlg.h"

#include "TeleoperationDlg.h"
#include "SearchObjectDlg.h"
#include "vfw.h"

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

/////////////////////////////////////////////////////////////////////////////
// CVideoConfigureDlg dialog


CVideoConfigureDlg::CVideoConfigureDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CVideoConfigureDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CVideoConfigureDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

CVideoConfigureDlg::~CVideoConfigureDlg()
{
	CDialog::~CDialog();


}
void CVideoConfigureDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CVideoConfigureDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CVideoConfigureDlg, CDialog)
	//{{AFX_MSG_MAP(CVideoConfigureDlg)
	ON_BN_CLICKED(IDC_VIDEOSOURCE, OnVideosource)
	ON_BN_CLICKED(IDC_VIDEOFORMAT, OnVideoformat)
	ON_BN_CLICKED(IDC_VIDEOSET, OnVideoset)
	ON_BN_CLICKED(IDC_FRAMESAVE, OnFramesave)
	ON_BN_CLICKED(IDC_FRAMESTOP, OnFramestop)
	ON_BN_CLICKED(IDC_VIDEOSAVE, OnVideosave)
	ON_BN_CLICKED(IDC_VIDEOSAVEEND, OnVideosaveend)
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CVideoConfigureDlg message handlers

// 显示视频源对话框,控制视频输入频道和参数的选择
void CVideoConfigureDlg::OnVideosource() 
{
	// TODO: Add your control notification handler code here
	capDlgVideoSource(m_hCaptureVideoConfig);
	
}


// 显示视频格式对话框,控制选择数字化的视频帧尺寸和像素的位数
void CVideoConfigureDlg::OnVideoformat() 
{
	// TODO: Add your control notification handler code here
	capDlgVideoFormat(m_hCaptureVideoConfig);	
	
}

// 显示视频显示对话框,控制捕获时视频在显示器上的外观
// 它不影响数字化视频数据,但影响数字信号的描述
void CVideoConfigureDlg::OnVideoset() 
{
	// TODO: Add your control notification handler code here
	capDlgVideoDisplay(m_hCaptureVideoConfig);
	
}

// 保存单帧图像至C:\SINGLEBMP.BMP
void CVideoConfigureDlg::OnFramesave() 
{
	// TODO: Add your control notification handler code here
	capFileSaveDIB(m_hCaptureVideoConfig, "C:\\SINGLEBMP.BMP");
	
}

// 冻结画面
void CVideoConfigureDlg::OnFramestop() 
{
	// TODO: Add your control notification handler code here
	capGrabFrameNoStop(m_hCaptureVideoConfig);
	
}

//启动视频流捕获,并将图象保存至C:\\CAPTURE.AVI
//捕获持续到如下事件发生,按下ESC键或鼠标,应用程序停止或放弃捕获操作,硬盘满。
void CVideoConfigureDlg::OnVideosave() 
{
	// TODO: Add your control notification handler code here

	GetDlgItem(IDC_VIDEOSAVEEND)->EnableWindow(TRUE);    //使"结束保存"按钮使能
	capCaptureSequence(m_hCaptureVideoConfig);           //默认保存至C:\\CAPTURE.AVI
}

//结束保存,停止视频流存入文件
void CVideoConfigureDlg::OnVideosaveend() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_VIDEOSAVEEND)->EnableWindow(FALSE);      //使"结束保存"按钮灰色显示
	capCaptureStop(m_hCaptureVideoConfig);
}

BOOL CVideoConfigureDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	GetDlgItem(IDC_VIDEOSAVE)->EnableWindow(TRUE);       //使"保存视频"按钮使能
	GetDlgItem(IDC_VIDEOSAVEEND)->EnableWindow(FALSE);   //使"结束保存"按钮灰色显示
	
	m_nTimerInVideoConfig=SetTimer(2,1000/RATE, NULL);
	

	CString strDlgCaption;
	GetParent()->GetWindowText(strDlgCaption);           //得到父窗口的标题
	if(strDlgCaption=="路径跟踪实验")
		m_hCaptureVideoConfig=((CWalkWhiteDlg* )GetParent())->m_hCaptureInWhiteDlg;
	else
		if(strDlgCaption=="遥操作实验")
			m_hCaptureVideoConfig=((CTeleoperationDlg *)GetParent())->m_hCaptureInTeleDlg;
		else
			if(strDlgCaption=="智能机器人的目标搜索")
				m_hCaptureVideoConfig=((CSearchObjectDlg *)GetParent())->m_hCaptureInSearchObjectDlg;

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


//视频显示
void CVideoConfigureDlg::DisplayFrames()
{
	// TODO: Add extra initialization here
	CWnd* pVideoConfig;
	CDC* pDC;
	CDC dcMemory;
	CBitmap  *pOldBmp;
	CBitmap newBmp;			//公用位图对象
	CRect videoRect;


	pVideoConfig = GetDlgItem(IDC_VIDEOINCONFIGDLG);
	pDC = pVideoConfig -> GetDC();
	pVideoConfig->GetWindowRect(&videoRect);
	newBmp.CreateCompatibleBitmap(pDC, WIDTH, HEIGHT);//在这里还调用的是全局的对象theApp

	
	dcMemory.CreateCompatibleDC(pDC);
    pOldBmp = dcMemory.SelectObject(&newBmp);
	
	BYTE r, g, b;
	for(int i=0;i<HEIGHT;i++)
		for(int j=0;j<WIDTH;j++)
		{
			//COLORREF 0x00bbggrr
			r=theApp.ColorStructure[(HEIGHT-i-1) * WIDTH * 3 + j * 3 + 2];
			g=theApp.ColorStructure[(HEIGHT-i-1) * WIDTH * 3 + j * 3 + 1];//此处rr为高字节 
			b=theApp.ColorStructure[(HEIGHT-i-1) * WIDTH * 3 + j * 3 + 0];
			dcMemory.SetPixel(j,i,RGB(r, g, b));
		}
//	pDC->BitBlt(0, 0, WIDTH, HEIGHT, &dcMemory, 0, 0, SRCCOPY);
	//从(0,0)点开始从内存兼容位图中拷贝图像至设备环境句柄
	pDC->BitBlt(0, 0, videoRect.Width(),videoRect.Height(), &dcMemory, 0, 0, SRCCOPY);     
	UpdateWindow();

	dcMemory.SelectObject(pOldBmp);

	newBmp.DeleteObject();  //释放theApp.newBmp所占的内存
	ReleaseDC(&dcMemory);
	ReleaseDC(pDC);	

}

void CVideoConfigureDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	DisplayFrames();
	
	CDialog::OnTimer(nIDEvent);
}

void CVideoConfigureDlg::OnOK() 
{
	// TODO: Add extra validation here
	KillTimer(m_nTimerInVideoConfig);

	CDialog::OnOK();
}

void CVideoConfigureDlg::OnCancel()
{
	// TODO: Add extra cleanup here
	KillTimer(m_nTimerInVideoConfig);

	CDialog::OnCancel();
}

⌨️ 快捷键说明

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