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

📄 vcshowdlg.cpp

📁 影像采集卡开发源程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// VCShowDlg.cpp : implementation file
//

#include "stdafx.h"
#include "VCShow.h"
#include "VCShowDlg.h"
#include "DVRSDK.h"
#include  "DVRNet.h"
#include "Csetting.h"
#include <afxmt.h>
#include <time.h>
#include "math.h"
#include "ColorSplitDlg.h"
#include "RotateDlg.h"
#include "ximage.h"
#include "Splitcolor.h"
CCriticalSection m_Sync;

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

DWORD	g_bitrate = 512;
DWORD	g_frmrate = 25;
DWORD	g_interval = 25;
#define PI 3.1415926535
#define RADIAN(angle) ((angle)*PI/180.0) //角度到弧度转化的宏
DWORD g_VStrmInfo[10] ;
DWORD g_AStrmInfo[10] ;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

void CALLBACK OnVideoPro(DWORD dwCardID, const BYTE* pDIBHead, const BYTE* pDIBits, LPVOID pParam)
{

	ForRGB24VideoCallBack((unsigned long)dwCardID);
    
   

}


/*void CALLBACK OnVideoPro(DWORD dwCardID, BYTE *pbuff,DWORD dwSize,BOOL isKeyFrm)
{
	g_VStrmInfo[dwCardID] += dwSize;
	HxnNET_SendVideoData(dwCardID,pbuff,(LONG)dwSize,isKeyFrm);
}*/


class CAboutDlg : public CDialog
{
public:
	CAboutDlg();
	
	// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA
	
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL
	
	// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CVCShowDlg dialog

CVCShowDlg::CVCShowDlg(CWnd* pParent /*=NULL*/)
: CDialog(CVCShowDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CVCShowDlg)
	m_datex = 70;
	m_datey = 210;
	m_logox = 10;
	m_logoy = 10;
	m_timex = 210;
	m_timey = 210;
	m_isShowDate = FALSE;
	m_isShowLogo = FALSE;
	m_isShowTime = FALSE;
	m_LogoText = _T("VCShow例程");
	m_ulCapWidth = 320;
	m_ulCapHeight = 240;
	m_iMode = 14;
	m_iBlaze = 14;
	m_VideoInput = 0;
	m_bUseAudio = FALSE;
	m_iIndex = 0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_blRun = FALSE;
	capName=0;
	series_flag=0;
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	//lpBits=NULL;
}



void CVCShowDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CVCShowDlg)
	DDX_Control(pDX, IDC_VIDEOPRO, m_Videopro);
	DDX_Control(pDX, IDC_CAPTURES, m_pardlg);
	DDX_Control(pDX, IDC_CONTRAST, m_contrast);
	DDX_Control(pDX, IDC_SATURATION, m_saturation);
	DDX_Control(pDX, IDC_HUE, m_hue);
	DDX_Control(pDX, IDC_BRIGHTNESS, m_brightness);
	DDX_Control(pDX, IDC_VIDEO_SHOW, m_VideoDlg);
	DDX_Text(pDX, IDC_DATE_X, m_datex);
	DDV_MinMaxInt(pDX, m_datex, 0, 1023);
	DDX_Text(pDX, IDC_DATE_Y, m_datey);
	DDV_MinMaxInt(pDX, m_datey, 0, 767);
	DDX_Text(pDX, IDC_LOGO_X, m_logox);
	DDV_MinMaxInt(pDX, m_logox, 0, 1023);
	DDX_Text(pDX, IDC_LOGO_Y, m_logoy);
	DDV_MinMaxInt(pDX, m_logoy, 0, 767);
	DDX_Text(pDX, IDC_TIME_X, m_timex);
	DDV_MinMaxInt(pDX, m_timex, 0, 1023);
	DDX_Text(pDX, IDC_TIME_Y, m_timey);
	DDV_MinMaxInt(pDX, m_timey, 0, 767);
	DDX_Check(pDX, IDC_DATECHECK, m_isShowDate);
	DDX_Check(pDX, IDC_LOGOCHECK, m_isShowLogo);
	DDX_Check(pDX, IDC_TIMECHECK, m_isShowTime);
	DDX_Text(pDX, IDC_LOGO_EDIT, m_LogoText);
	DDV_MaxChars(pDX, m_LogoText, 20);
	DDX_Text(pDX, IDC_CAP_WIDTH, m_ulCapWidth);
	DDX_Text(pDX, IDC_CAP_HEIGHT, m_ulCapHeight);
	DDX_CBIndex(pDX, IDC_INFOCUS, m_iMode);
	DDX_CBIndex(pDX, IDC_INBLAZE, m_iBlaze);
	DDX_Radio(pDX, IDC_RADIO_AV1, m_VideoInput);
	DDX_Check(pDX, IDC_CHECK_USE_AUDIO, m_bUseAudio);
	DDX_Text(pDX, IDC_EDIT_INDEX, m_iIndex);
	DDV_MinMaxInt(pDX, m_iIndex, 0, 15);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CVCShowDlg, CDialog)
//{{AFX_MSG_MAP(CVCShowDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BT_RUN, OnBtRun)
ON_BN_CLICKED(IDC_BT_CLOSE, OnBtClose)
ON_WM_HSCROLL()
ON_BN_CLICKED(IDC_DEFALUT, OnDefalut)
ON_BN_CLICKED(IDC_DATECHECK, OnDatecheck)
ON_BN_CLICKED(IDC_TIMECHECK, OnTimecheck)
ON_BN_CLICKED(IDC_LOGOCHECK, OnLogocheck)
ON_BN_CLICKED(IDC_RADIO_AV1, OnRadioAv1)
ON_BN_CLICKED(IDC_RADIO_AV2, OnRadioAv2)
ON_BN_CLICKED(IDC_RADIO_SVIDEO, OnRadioSvideo)
ON_BN_CLICKED(IDC_SET_CAPSIZE, OnSetCapsize)
ON_CBN_CLOSEUP(IDC_INBLAZE, OnCloseupInblaze)
ON_CBN_CLOSEUP(IDC_INFOCUS, OnCloseupInfocus)
ON_BN_CLICKED(IDC_CAPTURES, OnCaptures)
ON_BN_CLICKED(IDC_MPEG_PAR, OnMpegPar)
ON_BN_CLICKED(IDC_CHECK_USE_AUDIO, OnCheckUseAudio)
ON_BN_CLICKED(IDC_BT_GET_CARDID, OnBtGetCardid)
ON_BN_CLICKED(IDC_CAPTUREPIC, OnCapturepic)
ON_BN_CLICKED(IDC_SERIES, OnSeries)
ON_WM_TIMER()
	ON_BN_CLICKED(IDC_SINGLE_IMAGE, OnSingleImage)
	ON_BN_CLICKED(IDC_IMAGE_ROTATE, OnImageRotate)
	ON_BN_CLICKED(IDC_IMAGE_HFLIP, OnImageHflip)
	ON_BN_CLICKED(IDC_IMAGE_VFLIP, OnImageVflip)
	ON_BN_CLICKED(IDC_IMAGE_FILTER, OnImageFilter)
	ON_BN_CLICKED(IDC_IMAGE_SNAP, OnImageSnap)
	ON_BN_CLICKED(IDC_IMAGE_STOPSNAP, OnImageStopsnap)
	ON_BN_CLICKED(IDC_IMAGE_ZHUANZHI, OnImageZhuanzhi)
	ON_BN_CLICKED(IDC_CORNER, OnCorner)
	ON_BN_CLICKED(IDC_IMAGE_EDGE, OnImageEdge)
	ON_BN_CLICKED(IDC_IMAGE_GAMMA, OnImageGamma)
	ON_BN_CLICKED(IDC_IMAGE_PSEUDOCOLORS, OnImagePseudocolors)
	ON_BN_CLICKED(IDC_COLORSPLIT, OnColorsplit)
	ON_BN_CLICKED(IDC_IMAGE_GRAY, OnImageGray)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CVCShowDlg message handlers

BOOL CVCShowDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	
	// Add "About..." menu item to system menu.
	
	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);
	
	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
	
	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CVCShowDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CVCShowDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting
		
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
		
		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;
		
		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CVCShowDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CVCShowDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
}

void CVCShowDlg::OnBtRun() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	HxnDVR_UnInit();
	
	// 初始化启动第一路
	RECT rc= {10,10,320,240};
	BYTE * pBuffer1 = NULL;

	LPBYTE lpBits;

	
	int w = rc.right - rc.left;
	int h = rc.bottom - rc.top;
	
	int size = w * h * 3 + sizeof(BITMAPINFOHEADER);

	pBuffer1 = new BYTE[ size ];
	

	HxnDVR_Init(m_hWnd);
	// 连接第一路
	HxnDVR_ConnectDevice(m_iIndex);

	//ForVideoCallBack(0,NULL,);

//	HxnDVR_SetVidCapSize(m_iIndex,128,128);
	// 设置显示第一路位置
	//设定指定卡号的视频图像位置,并由 HxnDVR_ShowWindow 决定是否显示。
    LPVOID pParam1;
	HxnDVR_SetCallBackForRGB24VideoBuffer(m_iIndex,OnVideoPro,pParam1);

	
   	    

	//HxnDVR_SetCallBackForVideoBuffer(m_iIndex,OnVideoPro); 
	
	HxnDVR_SetWindowPos(m_iIndex, m_VideoDlg.m_hWnd, NULL);

	HxnDVR_ShowWindow(m_iIndex,TRUE);
	
    


	// 设置亮度等参数	
	//	slider control
	m_brightness.SetTicFreq(1);
	m_brightness.SetRange(0,510);
	m_ibrightness= 255;
	m_brightness.SetPos(m_ibrightness);
	
	m_contrast.SetTicFreq(1);
	m_contrast.SetRange(0,510);
	m_icontrast= 255;
	m_contrast.SetPos(m_icontrast);
	
	m_hue.SetTicFreq(1);
	m_hue.SetRange(0,510);
	m_ihue= 255;
	m_hue.SetPos(m_ihue);
	
	m_saturation.SetTicFreq(1); 
	m_saturation.SetRange(0,510);
	m_isaturation = 255;
	m_saturation.SetPos(m_isaturation);
	// 设置视频调节参数
	HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Brightness, m_ibrightness);
	HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Contrast, m_icontrast);
	HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Hue, m_ihue);
	HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Saturation, m_isaturation);
	
	g_bitrate = 512;
	g_frmrate = 25;
	g_interval = 25;
	
	m_blRun = TRUE;



	//获取当前使用视频压缩卡的ID号

}

void CVCShowDlg::OnBtClose() 
{
	// TODO: Add your control notification handler code here
	HxnDVR_UnInit();
	Invalidate(TRUE);
	//  复位
	m_ibrightness= 0;
	m_brightness.SetPos(m_ibrightness);
	m_icontrast= 0;
	m_contrast.SetPos(m_icontrast);
	m_ihue= 0;
	m_hue.SetPos(m_ihue);
	m_isaturation = 0;
	m_saturation.SetPos(m_isaturation);
	
	m_logox = 10;
	m_logoy = 10;
	m_timex = 210;
	m_timey = 210;
	m_datex = 70;
	m_datey = 210;

	m_isShowDate = FALSE;
	m_isShowLogo = FALSE;
	m_isShowTime = FALSE;
	
	m_ulCapWidth = 320;
	m_ulCapHeight = 240;
	
	m_iMode = 14;
	m_iBlaze = 14;
	m_VideoInput = 0;
	
	g_bitrate = 512;
	g_frmrate = 25;
	g_interval = 25;
	
	m_bUseAudio = FALSE;
	
	UpdateData(FALSE);
	
	m_blRun = FALSE;
}

void CVCShowDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	UpdateData(TRUE);
	int DlgId = pScrollBar->GetDlgCtrlID();
	switch(DlgId)
	{
	case IDC_BRIGHTNESS:
		{
			m_ibrightness = m_brightness.GetPos();
			HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Brightness, m_ibrightness);
		}
		break;
		
	case IDC_CONTRAST:
		{
			m_icontrast = m_contrast.GetPos();
			HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Contrast, m_icontrast);
		}
		break;
		
	case IDC_HUE:
		{
			m_ihue = m_hue.GetPos();
			HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Hue, m_ihue);
		}
		break;
		
	case IDC_SATURATION:
		{
			m_isaturation = m_saturation.GetPos();
			HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Saturation, m_isaturation);
		}
		break;
	}
	
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CVCShowDlg::OnDefalut() 
{
	// TODO: Add your control notification handler code here
	m_ibrightness= 255;
	m_icontrast= 255;
	m_ihue= 255;
	m_isaturation = 255;
	
	m_brightness.SetPos(m_ibrightness);
	m_contrast.SetPos(m_icontrast);
	m_hue.SetPos(m_ihue);
	m_saturation.SetPos(m_isaturation);
	
	// 设置视频调节参数
	HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Brightness, m_ibrightness);
	HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Contrast, m_icontrast);
	HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Hue, m_ihue);
	HxnDVR_SetVPropertyValue(m_iIndex, VProperty_Saturation, m_isaturation);
}

void CVCShowDlg::OnDatecheck() 
{
	// TODO: Add your control notification handler code here
	if (! HxnDVR_IsConnected(m_iIndex))
	{
		m_isShowDate = FALSE;
		UpdateData(FALSE);
		return;
	}
	UpdateData(TRUE);
	HxnDVR_ShowDate(m_iIndex, m_isShowDate, m_datex, m_datey);
}

void CVCShowDlg::OnTimecheck() 
{
	// TODO: Add your control notification handler code here
	if (! HxnDVR_IsConnected(m_iIndex))
	{
		m_isShowTime = FALSE;
		UpdateData(FALSE);
		return;
	}
	UpdateData(TRUE);
	HxnDVR_ShowTime(m_iIndex, m_isShowTime, m_timex, m_timey);
}

void CVCShowDlg::OnLogocheck() 
{
	// TODO: Add your control notification handler code here
	if (! HxnDVR_IsConnected(m_iIndex))
	{
		m_isShowLogo = FALSE;
		UpdateData(FALSE);
		return;
	}
	UpdateData(TRUE);
	HxnDVR_ShowLogo(m_iIndex, m_isShowLogo, m_logox, m_logoy);
	HxnDVR_SetLogoText(m_iIndex, m_LogoText);
}

void CVCShowDlg::OnRadioAv1() 
{
	// TODO: Add your control notification handler code here
	HxnDVR_ConnectDevice(m_iIndex, VInput_AV1);
}

void CVCShowDlg::OnRadioAv2() 
{
	// TODO: Add your control notification handler code here
	HxnDVR_ConnectDevice(m_iIndex, VInput_AV2);
}

void CVCShowDlg::OnRadioSvideo() 
{
	// TODO: Add your control notification handler code here
	HxnDVR_ConnectDevice(m_iIndex, VInput_AV3);
}

void CVCShowDlg::OnSetCapsize() 
{
	// TODO: Add your control notification handler code here
	if (! HxnDVR_IsConnected(m_iIndex))
	{
		return;
	}
	UpdateData(TRUE);
	if(!HxnDVR_SetVidCapSize(m_iIndex, m_ulCapWidth, m_ulCapHeight))
	{
		HxnDVR_GetVidCapSize(m_iIndex, (unsigned long *)&m_ulCapWidth, (unsigned long *)&m_ulCapHeight);
		UpdateData(FALSE);
		MessageBox("尺寸超出范围 !","Dvr-提示",MB_OK|MB_ICONINFORMATION);
	}
	else
	{
		MessageBox("OK !","另存为..",MB_OK|MB_ICONINFORMATION);
	}
}

void CVCShowDlg::OnCloseupInblaze() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	//图像卜莱兹显示模式, 选择范围(0,1,...14)。
	HxnDVR_ShowInBlaze(m_iIndex, m_iBlaze);
}

void CVCShowDlg::OnCloseupInfocus() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	
	//显示画质增强模式, 选择范围(0,1,...14)。
	HxnDVR_ShowInfocus(m_iIndex, m_iMode);
}



void CVCShowDlg::OnOK() 
{
	// TODO: Add extra validation here
	
	CDialog::OnOK();
}

void CVCShowDlg::OnCaptures() 
{
	// TODO: Add your control notification handler code here
	if (! HxnDVR_IsConnected(m_iIndex))
	{
		return;
	}
	// 判断第0路是否在录像或网传
	//判断指定卡是否正在进行捕捉流数据。
	if (! HxnDVR_IsVideoCapture(m_iIndex))
	{
		RecordMPEGPara mpgPara;
		
		mpgPara.RecProperty_BitRate				= g_bitrate;
		mpgPara.RecProperty_KeyFrameInterval	= g_interval;
		mpgPara.RecProperty_FrameRate			= g_frmrate;
		mpgPara.RecProperty_VStandard			= VRecord_PAL;
		//      只有网络传无存盘录像
		//		HxnDVR_SetMPEG4Property(m_iIndex, &mpgPara, MPEG4Mode_ToTransmit);
		//		注意:如果在 HxnDVR_SetCaptureFile 函数中 dwMode 参数使用
		//		CaptureMode_VA_MPEG4_FILE,此时必须调用 HxnDVR_SetMPEG4Property 函数,
		//		且第三个参数必须为 MPEG4Mode_ToFile 或 MPEG4Mode_Both
		//      既有录像又有网络传传输
		HxnDVR_SetMPEG4Property(m_iIndex, &mpgPara, MPEG4Mode_Both);
		
	
		

⌨️ 快捷键说明

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