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

📄 videocaptureview.h

📁 电子监控的网络编程实例
💻 H
字号:
// VideoCaptureView.h : interface of the CVideoCaptureView class
//
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INCLUDES()
#include "mscomm.h"
//}}AFX_INCLUDES



#if !defined(AFX_VIDEOCAPTUREVIEW_H__45ACEAED_9907_11D7_B4E0_0000E28BC2E9__INCLUDED_)
#define AFX_VIDEOCAPTUREVIEW_H__45ACEAED_9907_11D7_B4E0_0000E28BC2E9__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "ADODB.h"
#include "DlgConfigSet.h"
#include "DlgBigImage.h"
#include "DlgSetRadar.h"
#include "DataSendSocket.h"
#include "ServerSocket.h"
#include "DlgBkM.h"
#include "VideoClass.h"
#include "afxtempl.h"
#include "DataRecord.h"

//#include "VideoCaptureDoc.h"
#pragma comment(lib, "wininet.lib")

#define WM_DATA_HAVE_CHANGE WM_USER + 2
#define WM_SAVE_IMAGE_FINISHED WM_USER + 4
#define WM_SENDRADARCTRL  12
#define IDC_TIME_CAPTURE 9999
#define WM_HAOPAI_IMAGE WM_USER + 6 //通知主程序绘制 号牌图像
#define WM_DELETE_IMAGE_FINISHED WM_USER + 3


typedef struct tagTHREADPARMS {
    CString text[6],FileName[6][2],station[6];
	HWND hWnd;
	int BlockNum;
	HDIB hDib[6][2];
	BOOL m_JPG;
	CString DataPath;
	int m_JpgQuality;
	int iGroup;
	UINT XH;
//	CVideoCaptureView* pView;
	int ThisSpeed;  //当前车速度 
	int SpeedUp; //当前小车限速<=20表示没有设置小车限速
	bool bSPJC;
} THREADPARMS;



typedef struct tagRADARSTATUS{
	int radar;	//获得雷达类型 0-斯德克 1-火花
	int speeddif;//最大雷达灵敏度速度差值
	int	driveway; //相对方向
	int	distance;//距离
	int	position;//前后位置
	int	mode;//模式!=0 运动 0静止
	int SpeedMode;//波西雷达,测速方式(0最快车速 1最慢车速 2最近车速)
	int controlMode;//波西雷达,控制方式(0 现代方式 1火花方式)

}RADARSTATUS;
//车辆行驶方向 0-同向 >0逆向 <0所有目标
//测量距离 0-距离平均值 >0最大距离 <0最小距离
//模式 !=0-运动 0-静止
//雷达位置 !=0-通过前窗测速 0-后窗测速

//火花雷达工作原理,发送FE A1 启动雷达。
//当雷达在工作中时可能无法收到控制信息,只有雷达返回控制代码FD XX时才表示雷达接收到命令.
//发送控制信息,控制测速方式。在计数器WM_SENDRADARCTRL循环发送控制命令,直至收到确认信息。
//终止计数器停止发送控制信息。
//线程ThreadRadar 不断发送测速指令FE 3F。


UINT ThreadDrawText (LPVOID pParam); //添加汉字(时间\速度信息)
UINT ThreadSave(LPVOID pParan);		//保存图像文件,后期处理
UINT ThreadRadar (LPVOID pParam);	//火花雷达 测速线程
UINT ThreadDataSend(LPVOID pParam);  //远程数据传输线程

typedef struct tagAnalyPicCap 
{    
    BYTE *pBuffer;
	DWORD dwSize;
	CString DataPath;
	int iNum;//当前的内存块号
	int ThisSpeed;  //当前车速度 
	int SpeedUp; //当前小车限速<=20表示没有设置小车限速
	long XH;//当前纪录的序号
}ANALYPICCAP;
BOOL ImageShibie(LPVOID pParam);//号牌识别 if return FALSE 错误的抓拍(识别出来为小车,但没达到小车超速限制),
//static BOOL MemoryStatus[4];
//static BOOL CanDoOneThread;
static BOOL ShiBie[4];
static TCHAR ThisLicense[4][50];
static TCHAR HPImage[4][MAX_PATH];//存放识别号牌临时路径
static	HANDLE hRadarThread;
static BYTE HPZL[4];
static BYTE HPYS[4];
typedef struct tagShiBieParam //识别参数
{    
	int gray;
    int rate;
	int StartX;
	int EndX;
	int StartY;
	int EndY;
}SHIBIEPARAM;

//static PBYTE  pimage;
typedef struct tagFTP{
	CString Server;
	CString UserID;
	CString Password;
}FTP;

static CCriticalSection g_cs;


typedef struct BKTag{
	TCHAR sHPHM[15];
	TCHAR sBKHM[15];
	int   nBKYY;
}BK;
typedef struct BKYYTag{	
	int   nBKYY;
	CString sBKYY;
}BKYY;

class CVideoCaptureView : public CFormView
{
protected: // create from serialization only
	CVideoCaptureView();
	DECLARE_DYNCREATE(CVideoCaptureView)

public:
	//{{AFX_DATA(CVideoCaptureView)
	enum { IDD = IDD_VIDEOCAPTURE_FORM };
	CListCtrl	m_ctlLIST_ZDJC;
	CMSComm		m_Comm;
	//}}AFX_DATA

// Attributes
public:
//	CVideoCaptureDoc* GetDocument();

// Operations
public:

	CWinThread	*hInitParam;//导入黑名单线程

	CVideoClass m_VC;//抓拍类


	BOOL		m_bSmallCar;//是否小车
	int			m_iSpeedTemp;
	BOOL		m_bRecover;//是否覆盖标志
	CString		m_szDLBM;//地理编码
	CDlgBkM		m_DlgBK;

	DWORD       dwDltTime;

	int			m_iMatch;
	SHIBIEPARAM ShibieParam;
	BOOL		ZDJC;
	CString		JCTP;
	CString     oldJCTP;
	CString		HPTP;
	CDataRecord * pDR;
	DWORD		m_nKSSJ;//抓拍计时开始
	DWORD		m_nZZSJ;//抓拍计时结束
	
	CArray<BK,BK> bkArray;
	CArray<BKYY,BKYY> bkyyArray;

	int			m_ZDJCiNum;
	HDIB		m_ZDJChDib[2];///自动稽查时使用	
	int			FlashDelay,CapDelay;//闪光灯延迟和抓拍延时
	BOOL		m_bCapMinSpeed,m_bCapSmallCarSpeed;
	int			m_iSendPicNum;
	DWORD		m_dwManualTransRecordID;
	BOOL		m_bAutoTrans;//是否自动传输
	int			TransMode;
	FTP			ftp;
	CString		m_szMachineID,m_szAddress;//
	HANDLE		hThreadCopy;
	BOOL		ExitSendDataThread;
	CWinThread* pThreadDataSend;
	CServerSocket m_ServerSkt;//侦听提供服务的Socker
	CDataSendSocket m_skt;//与发送数据的socket
	CString		m_szUpSpeed,m_szSlowSpeed;
	CRect		rectPic;
	BOOL		m_JPG;   //保存为JPG文件
	BOOL		m_bAutoCap;//自动抓拍标志
	BOOL		m_bSaveStation, m_bSaveWeizhang;
	BOOL		SpeedLess20;//如果测量速度<20 then TRUE;当自动抓拍后设置为FALSE
	//当SpeedLess20==True and 当前速度>限速 时也抓拍
	BYTE		bufSend[20];
	RADARSTATUS RadarStatus;
	//	DWORD		ffff;
	//	BOOL ImageHaveSaved;
	CString		DataPath;
	UINT		m_uSelectRecord;
	//	BOOL m_enableStation;	
	int			m_JpgQuality;   //jpg压缩质量因子  保存在Config.ini中
	BOOL		IsCapturing;   //是否正在捕获视频
	BOOL		m_nJCSave;
	BOOL		m_bInitOK;

	CString		m_stationName;//默认路段名称
	int			m_ImageNum;//抓拍图象数量
	int			m_videoLimited;//视频大小限制M
	CString		m_szPoliceUint;//处理民警单位
	
	CDlgConfigSet* pcsDlg;  //对话框  设置主要参数,和抓拍按钮
	
	BYTE		ComBuf[160];
	int			m_iBufLength;
	CString		m_szSeveralBMP[4][2];//图片文件名字符串
	
	BYTE m_CommPort;
	//	CWinThread*	hRadarThread;
	
	BOOL		m_bShowVideo;

	int			m_nChanel;
	
	BOOL        m_bExitInitThread;

	CADOConnection* pConn;
	CRect rectVideo,rectImage;
	int m_nNumBmp,m_nOldNumBmp,m_nThisBmpNum;
	int m_iSpeed,m_iSpeedDown,m_iSpeedUp,m_PoliceSpeed,m_OldTargetSpeed,m_OldLockSpeed,m_OldFastSpeed;
protected:
// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CVideoCaptureView)
	public:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	virtual void OnInitialUpdate(); // called first time after construct
	//}}AFX_VIRTUAL

// Implementation
public:	
	void SetZDJC();
	LONG Array_CompareInBKList(CString sHPHM,CString &sXYHP);	
	void Array_DelFromList(CString sHPHM);
	long Array_AddToBKList(BK pBK);
	long Array_EditBKList(long nXH,BK pBK);
	CString Array_FindInBKYYList(int nBKYY);
	static CVideoCaptureView* GetView();
	bool SetWindowEnable(DWORD nID,bool bEnabe=TRUE);		
	int MatchLicense(char* license1,char* license2,int size1,int size2);
	void ShiBieImage();
	void SetBoxiRadarCtrl(int i,int j=0);
	int FtpUpdateFile(CString server, CString User, CString Password, CString RemoteID, CString RemoteCode, CString FileName, BOOL NotNeedPath=FALSE, BOOL HaveShiBie=FALSE, CString wjm="",BOOL DataFile=FALSE);
	int UpdateIP(CString Server,CString User, CString Password,CString FileName);
	BOOL GetRealIP(CString &ip);
	BOOL ConnectFTP(CString ServerName="211.154.211.46",CString User="web64014" ,CString  Password="r5w5y0b0");
	BOOL Listen(int port=4100);
	void SetRemoteMode(CString str);
	void SendRadarCtrl(int a);
	void DrawTransparentBitmap(CDC *pDC, UINT IDImage,CRect &rect, COLORREF rgbMask);
	void GetComData();
	void UpdateRadarStatus();
	void GetRadarSpeed();
	void InitRadar();
	void SendDataToCom(BYTE *pData, int DataLen);
	int FindRadarEnd(int length,int& RadarMode,int start=0);
	BOOL ComOpen(BYTE Comm);  //1打开正常0//打开失败-1串口不存在
	void InsertToList();
	void CaptureAVI(DWORD dwSize=20);
	CString GetLicense(HDIB hDib);
	CString Capture(int targetSpeed,int fastSpeed,int lockSpeed, int MaxSpeed=50,BOOL SaveToDB=TRUE,int MemoryBlock=0);


	afx_msg void OnBtnsetcom();
	afx_msg void OnBtnsetradar();
	afx_msg void OnBtnautoset();
	afx_msg void OnBtnimagecap();
	afx_msg void OnBtnvideocap();

	virtual ~CVideoCaptureView();


protected:

// Generated message map functions
protected:
	//{{AFX_MSG(CVideoCaptureView)
	afx_msg void DrawHaoPai(WPARAM wParam, LPARAM lParam);
	afx_msg void ImageHaveDelete(WPARAM wParam, LPARAM lParam);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnTimer(UINT nIDEvent);
	afx_msg void OnChannelOne(); 
	afx_msg void OnChannelTwo(); 
	afx_msg void OnSVideo(); 
	afx_msg void OnUpdateSVideo(CCmdUI* pCmdUI);
	afx_msg void OnUpdateAutoTrans(CCmdUI* pCmdUI);
	afx_msg void OnUpdateChannelOne(CCmdUI* pCmdUI);
	afx_msg void OnUpdateChannelTwo(CCmdUI* pCmdUI);
	afx_msg void OnInterlaced();
	afx_msg void OnUpdateInterlaced(CCmdUI* pCmdUI);
	afx_msg void OnJpgQuality();
	afx_msg void OnPaint();
	afx_msg void OnOnCommMscommSpeed();
	afx_msg void OnUpdateCaptureJpg(CCmdUI* pCmdUI);
	afx_msg void OnCaptureJpg();
	afx_msg void OnImageCopy();
	afx_msg void OnCommOpen();
	afx_msg void OnUpdateCommOpen(CCmdUI* pCmdUI);
	afx_msg void OnCaptureVideo();
	afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
	afx_msg void OnDblclkListData(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnStopCapture();
	afx_msg void OnUpdateStopCapture(CCmdUI* pCmdUI);
	afx_msg void OnUpdateCaptureAvi(CCmdUI* pCmdUI);
	afx_msg void OnCaptureAvi();
	afx_msg void OnComDataTest();
	afx_msg void OnUpdateComDataTest(CCmdUI* pCmdUI);
	afx_msg void OnAutoCapture();
	afx_msg void OnDestroy();
	afx_msg void OnBtnquit();
	afx_msg void OnBtndeal();
	afx_msg void OnBtnlog();
	afx_msg void OnSetRoad();
	afx_msg void OnSetPoliceUint();
	afx_msg void OnSetCode();
	afx_msg void OnCarType();
	afx_msg void OnSetMachine();
	afx_msg void OnSetFtpserver();
	afx_msg void OnAutoTrans();
	afx_msg void OnUpdateAutoCapture(CCmdUI* pCmdUI);
	afx_msg void OnBkm();
	afx_msg void OnBtnldjc();
	afx_msg void OnBtnshowvedio();
	afx_msg void DataHaveChange(WPARAM wParam, LPARAM lParam);
	afx_msg void ImageHaveSave(WPARAM wParam, LPARAM lParam);
	afx_msg void AviIsStop(WPARAM wParam, LPARAM lParam);
	afx_msg void OnSetComm();
	afx_msg void OnDblclkListZdjc(NMHDR* pNMHDR, LRESULT* pResult);
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnDeal();
	DECLARE_EVENTSINK_MAP()
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
private:
	CPoint m_LastPoint;
	void InitBKList();
	int FindInBKList(TCHAR *sHPHM,CString &sPPHP);	
	static UINT ThreadInitParam(LPVOID lpParam);//初始化参数线程
	void CalcSpeed(BOOL autoCap,int start=0);//计算速度
	void CalcSpeed_huohua(BOOL autoCap,int start=0);
	void CalcSpeed_boxi(BOOL autoCap,int start=0);
	void CalcSpeed_sideke(BOOL autoCap,int start=0);
	
	

public:
	

	CString OldLicense,OldHpFile;//前一位识别的号牌号码,和图片保存路径【用于流动稽查】
	BOOL DispBigMode;//界面现实模式,1024*768 ? 800*600

	BOOL m_bFastMode;//是否快门

	int m_iTiggerTargetSpeed,m_iTiggerLockSpeed,m_iTiggerFastSpeed; //触发速度		
	CDlgBigImage* pbiDlg;// 查看大图对话框

	//抓拍图片设置
	HDIB	m_hDib[4][6][2];  //缓存抓拍的当前图像//缓冲区大小为4次 //一次最多6帧//全景,特写
	CString BmpText[4][6]; //缓冲抓拍图片要添加的文字信息//缓冲区大小为4次 //一次最多6帧
	CString FileName[4][6][2];//缓冲抓拍图片保存文件名//缓冲区大小为4次 //一次最多6帧
	int		thisBlockNum;//指向当前内存块编号
	//

	BYTE bMode[16];
//	BOOL RadarMode;//雷达模式FALSE="A" Mode TRUE="B" Mode
/***-------------------------------------------------------------------------
"A"Mode 4Byte   1 车速百位值ASCII 2 车速十位值ASCII 
				3 车速个位值ASCII 4 回车符(0x0D) 
TRUE=隔行扫描 FALSE=逐行扫描

"B" mode 16Byte 
1=数据类型(0x81)
2.7=0 2.6=1 2.5="LOCK" 2.4="SAME"
-------------------------------------------------------------------------***/

//	CString m_strBmpText;

};

typedef struct tagDATASEND{
	CVideoCaptureView* pView;
}DATASEND;


/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_VIDEOCAPTUREVIEW_H__45ACEAED_9907_11D7_B4E0_0000E28BC2E9__INCLUDED_)






















⌨️ 快捷键说明

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