📄 videocaptureview.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 + -