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

📄 dlcwbdemodlg.cpp

📁 该程序是在爱国者工业相机为硬件基础上开发的相机控制程序
💻 CPP
字号:
#include "stdafx.h"
#include "DLCWBDEMO.h"
#include "DLCWBDEMODlg.h"

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

VOID CALLBACK  FRAMECALLBACK( LPVOID   lpContext, LPVOID  lpBuf )
{
	CDLCWBDEMODlg *pDlg = (CDLCWBDEMODlg*)lpContext;
	OutputDebugString( " Frame Call back\n " );
//	Sleep( 1000 );
}

CDLCWBDEMODlg::CDLCWBDEMODlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDLCWBDEMODlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDLCWBDEMODlg)
	m_bPlay = FALSE;
	m_bCapture = FALSE;
	m_ShowType = (int)DS_SHOW;
	m_strMessage = _T("button down message");
	//}}AFX_DATA_INIT
	m_hDevice = NULL;
}

void CDLCWBDEMODlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDLCWBDEMODlg)
	DDX_Control(pDX, IDC_STATIC_VIDEO, m_staticVideo);
	DDX_Control(pDX, IDC_SLIDER_COLOR, m_sliderColor);
	DDX_Control(pDX, IDC_COMBO_COLOR, m_comboColor);
	DDX_Control(pDX, IDC_COMBO_SIZE, m_comboSize);
	DDX_Check(pDX, IDC_CHECK_PLAY, m_bPlay);
	DDX_Check(pDX, IDC_CHECK_AVI, m_bCapture);
	DDX_Radio(pDX, IDC_RADIO1, m_ShowType);
	DDX_Text(pDX, IDC_STATIC_MESSAGE, m_strMessage);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDLCWBDEMODlg, CDialog)
	//{{AFX_MSG_MAP(CDLCWBDEMODlg)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_CHECK_PLAY, OnCheckPlay)
	ON_CBN_SELCHANGE(IDC_COMBO_SIZE, OnSelchangeComboSize)
	ON_CBN_SELCHANGE(IDC_COMBO_COLOR, OnSelchangeComboColor)
	ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER_COLOR, OnReleasedcaptureSliderColor)
	ON_BN_CLICKED(IDC_BUTTON_CAP, OnButtonCap)
	ON_BN_CLICKED(IDC_CHECK_AVI, OnCheckAvi)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_BUTTON_PROP, OnButtonProp)
	ON_BN_CLICKED(IDC_BUTTON_LOADBG, OnButtonLoadbg)
	ON_MESSAGE( WM_CAPTURE, OnReceivedMessage )			// 绿色按钮按下
	ON_MESSAGE( WM_EXITBTNDOWN, OnExitButtonDown )		// 红色按钮按下
	ON_WM_SYSCOMMAND()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_CAPTOBUF, OnButtonCaptobuf)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CDLCWBDEMODlg::OnPaint() 
{
	CDialog::OnPaint();
}

/////////////////////////////////////////////////////////////////////////////
LRESULT CDLCWBDEMODlg::OnReceivedMessage(WPARAM WParam, LPARAM LParam)
{
	m_strMessage.Format("%s", _T( "green button down!\n") );
	UpdateData( FALSE );
	Sleep( 1000 );
	m_strMessage = _T("");
	UpdateData( FALSE );
	return 0;
	static nNum;
	CString strFN;
	strFN.Format( "Capture%d.bmp", nNum++ );
	DL_CaptureToBmp	( m_hDevice, strFN );
}

LRESULT CDLCWBDEMODlg::OnExitButtonDown(WPARAM WParam, LPARAM LParam)
{
	m_strMessage.Format("%s", _T( "red button down!\n") );
	UpdateData( FALSE );
	Sleep( 1000 );
	m_strMessage = _T("");
	UpdateData( FALSE );
	return 0;

}

BOOL CDLCWBDEMODlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	m_comboSize.SetCurSel( 2 );
	m_comboColor.SetCurSel( 0 );
	if( DL_SUCCESS != DL_Initial( &m_hDevice, m_hWnd ) )				// 初始化设备
	{
		DL_UnInitial( &m_hDevice );
		MessageBox( "Fail" );
		m_hDevice = NULL;
	}

	DL_SetFrameCallBack( m_hDevice, FRAMECALLBACK, this );

	return TRUE; 
}

BOOL CDLCWBDEMODlg::DestroyWindow() 
{
	Play( FALSE, GDI_SHOW );
	DL_UnInitial( &m_hDevice );									// 反初始化设备
	return CDialog::DestroyWindow();
}

void CDLCWBDEMODlg::OnCheckPlay() 
{
	UpdateData();	
	Play( m_bPlay, (SHOWTYPE)m_ShowType );											// 开始采集/停止采集
}

void CDLCWBDEMODlg::OnSelchangeComboSize() 
{
	Play( FALSE, (SHOWTYPE)m_ShowType );										// 改变大小之前必须关闭视频
	int 	nSize = m_comboSize.GetCurSel();
	ULONG   Width, Height;
	switch( nSize )
	{
	case 0: Width = 320;  Height = 240;  break;
	case 1: Width = 640;  Height = 480;  break;
	case 2: Width = 1280; Height = 1024; break;
	case 3: Width = 2048; Height = 1536; break;
	}
	DL_SetParam( m_hDevice, enWidth, Width );					// 设置采集宽度
	DL_SetParam( m_hDevice, enHeight, Height );					// 设置采集高度
	Play( TRUE, (SHOWTYPE)m_ShowType );
	m_bPlay = TRUE;
	UpdateData( FALSE );
}

void CDLCWBDEMODlg::OnSelchangeComboColor() 
{
	if( m_hDevice == NULL )    return;
	int 	nColor = m_comboColor.GetCurSel();
	ULONG   Min = 0;
	ULONG   Max;
	switch( nColor )
	{
	case 0: Max = 255; break;
	case 1: 
	case 2:
	case 3:
	case 5: Max = 63;  break;
	case 4: Max = 15;  break;
	case 6: DL_GetRegRange( m_hDevice, EXPOSURE, &Min, &Max );
	}

	m_sliderColor.SetRange( Min, Max );
	if( !m_bPlay )   return;

	ULONG  Val;
	if( nColor < 6 )
		DL_GetParam( m_hDevice,  (PARAMTYPE)nColor, &Val );			// 必须在采集状态
	else
		DL_RegOperation( m_hDevice, (REGISTER)(nColor-6), &Val, FALSE );
	m_sliderColor.SetPos( Val );
	UpdateData(FALSE);
}

void CDLCWBDEMODlg::OnReleasedcaptureSliderColor(NMHDR* pNMHDR, LRESULT* pResult) 
{
	int      nPos = m_sliderColor.GetPos();
	int      nColor = m_comboColor.GetCurSel();

	if( nColor < 6 )
		DL_SetParam( m_hDevice, (PARAMTYPE)nColor, nPos );			// 设置采集色彩参数
	else
		DL_RegOperation( m_hDevice, (REGISTER)(nColor-6), (ULONG*)&nPos, TRUE );	// 设置寄存器
	*pResult = 0;
}

void CDLCWBDEMODlg::OnButtonCap() 
{
	if( m_hDevice == NULL )    return;
	DL_CaptureToBmp	( m_hDevice, "capture.bmp" );
}

void CDLCWBDEMODlg::OnCheckAvi() 
{
	if( m_hDevice == NULL )    return;
	UpdateData();
	CString    strAviFile = "1.avi";
	if( m_bCapture )    
	{
//		DL_StartCapture( m_hDevice, strAviFile );
		((CButton*)GetDlgItem( IDC_BUTTON_CAP ) )->EnableWindow( FALSE );
	}
	else
	{
//		DL_StopCapture( m_hDevice );
		((CButton*)GetDlgItem( IDC_BUTTON_CAP ) )->EnableWindow( TRUE );
	}
}

VOID CDLCWBDEMODlg::Play( BOOL bPlay, SHOWTYPE ShowType )
{
	if( m_hDevice == NULL )    return;
	if( !bPlay )   
	{
		DL_Stop( m_hDevice );
		return;
	}

	RECT    rect;
	m_staticVideo.GetClientRect( &rect );

	DL_Start( m_hDevice, WS_CHILD , 0, 0, rect.right, rect.bottom, m_staticVideo.m_hWnd, ShowType );

//	DL_Start( m_hDevice, WS_OVERLAPPEDWINDOW, 20, 20, rect.right, rect.bottom, NULL, ShowType );

}

void CDLCWBDEMODlg::OnRadio1() 
{
	if( m_hDevice == NULL )    return;
	UpdateData();
	
	Play( FALSE, (SHOWTYPE)m_ShowType );
	Play( TRUE, (SHOWTYPE)m_ShowType );
	
}

void CDLCWBDEMODlg::OnRadio2() 
{
	if( m_hDevice == NULL )    return;
	UpdateData();
	
	Play( FALSE, (SHOWTYPE)m_ShowType );
	Play( TRUE, (SHOWTYPE)m_ShowType );
}

void CDLCWBDEMODlg::OnButtonProp() 
{
	if( m_hDevice == NULL )    return;
//	DL_ShowPropertyPage( m_hDevice );	
}

void CDLCWBDEMODlg::OnButtonLoadbg() 
{
	if( m_hDevice == NULL )    return;
	CFileDialog   fileDlg( TRUE, _T("BMP"), NULL,NULL, _T("24Bits BMP|*.bmp||")  );	
	CString    strFileName;
	if( fileDlg.DoModal() == IDOK )
	{
		strFileName = fileDlg.GetPathName();
	}

//	DL_LoadMaskBmp( m_hDevice,strFileName,0x00FF0000 );
}

#define MYFREE(PTR )   { if(PTR)   free(PTR);  PTR = NULL; }
void CDLCWBDEMODlg::OnButtonCaptobuf() 
{
	if( m_hDevice == NULL )    return;
	int 	nSize = m_comboSize.GetCurSel();
	ULONG   Width, Height;
	switch( nSize )
	{
	case 0: Width = 320;  Height = 240;  break;
	case 1: Width = 640;  Height = 480;  break;
	case 2: Width = 1280; Height = 1024; break;
	}

	BYTE   *pBuf = (BYTE*)new BYTE[ Width * Height * 3 ];
	BOOL bRet = DL_CaptureToBuf( m_hDevice, pBuf );

	DL_GammaOperation( pBuf, Width, Height, 24, 0.6f );

	// DO SOMETHING...
	Sleep( 1000 );
	delete [] pBuf ;

	return;

}

⌨️ 快捷键说明

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