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

📄 imagewnd.cpp

📁 基于背景差分算法和C均值聚类算法的车辆检测与跟踪
💻 CPP
字号:
// ImageWnd.cpp: implementation of the CImageWnd class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DetectAndTrack.h"
#include "ImageWnd.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CImageWnd::CImageWnd()
{
	m_nHScrollPos=0;
	m_nHCurPos=0;
	m_nHScrollMax=0;
	m_nVScrollPos=0;
	m_nVCurPos=0;
	m_nVScrollMax=0;
	m_pbtBits=0;
}

CImageWnd::~CImageWnd()
{
	if (m_pbtBits)
	{
		delete m_pbtBits;
	}
}

BEGIN_MESSAGE_MAP(CImageWnd, CWnd)
	//{{AFX_MSG_MAP(CImageWnd)
	ON_WM_HSCROLL()
	ON_WM_VSCROLL()
	ON_WM_PAINT()
	ON_WM_CREATE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

//处理水平滚动条
void CImageWnd::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nSBCode)
	{
	case SB_LINEDOWN:
		m_nHScrollPos+=5;
		break;
	case SB_LINEUP:
		m_nHScrollPos-=5;
		break;
	case SB_PAGEDOWN:
		m_nHScrollPos+=302;
		break;
	case SB_PAGEUP:
		m_nHScrollPos-=302;
		break;
	case SB_THUMBPOSITION:
	case SB_THUMBTRACK:
		m_nHScrollPos=nPos;
		break;
	}
	if (m_nHScrollPos<0) m_nHScrollPos=0;
	if (m_nHScrollPos>m_nHScrollMax) m_nHScrollPos=m_nHScrollMax;

	SetScrollPos(SB_HORZ,m_nHScrollPos);
	if (m_nHCurPos!=m_nHScrollPos)
	{
		ScrollWindow((m_nHCurPos-m_nHScrollPos),0);
		m_nHCurPos=m_nHScrollPos;
	}
	CWnd::OnHScroll(nSBCode, nPos, pScrollBar);
}

//处理垂直滚动条
void CImageWnd::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nSBCode)
	{
	case SB_LINEDOWN:
		m_nVScrollPos+=5;
		break;
	case SB_LINEUP:
		m_nVScrollPos-=5;
		break;
	case SB_PAGEDOWN:
		m_nVScrollPos+=222;
		break;
	case SB_PAGEUP:
		m_nVScrollPos-=222;
		break;
	case SB_THUMBPOSITION:
	case SB_THUMBTRACK:
		m_nVScrollPos=nPos;
		break;
	}
	if (m_nVScrollPos<0) m_nVScrollPos=0;
	if (m_nVScrollPos>m_nVScrollMax) m_nVScrollPos=m_nVScrollMax;

	SetScrollPos(SB_VERT,m_nVScrollPos);
	if (m_nVCurPos!=m_nVScrollPos)
	{
		ScrollWindow(0,(m_nVCurPos-m_nVScrollPos));
		m_nVCurPos=m_nVScrollPos;
	}
	CWnd::OnVScroll(nSBCode, nPos, pScrollBar);
}

//绘图函数
void CImageWnd::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	if (m_pbtBits)
	{
		int nX,nY;
		nX=-m_nHScrollPos;
		nY=-m_nVScrollPos;

		if (m_nWidth<320) nX=(320-m_nWidth)/2;
		if (m_nHeight<300) nY=(300-m_nHeight)/2;
		BITMAPINFOHEADER bmi;
		bmi.biSize=sizeof(BITMAPINFOHEADER);
		bmi.biWidth=m_nWidth;
		bmi.biHeight=m_nHeight;
		bmi.biPlanes=1;
		bmi.biBitCount=24;
		bmi.biCompression=BI_RGB;
		bmi.biSizeImage=0;
		bmi.biXPelsPerMeter=0;
		bmi.biYPelsPerMeter=0;
		bmi.biClrUsed=0;
		bmi.biClrImportant=0;
		StretchDIBits(dc.m_hDC,nX,nY,m_nWidth,m_nHeight,0,0,m_nWidth,m_nHeight,
		m_pbtBits, (BITMAPINFO *)&bmi,	DIB_RGB_COLORS,	SRCCOPY);
	}	
}
//预处理图像数据
void CImageWnd::SetImage(int nX, int nY, const void *pBits)
{
	m_nWidth=nX;
	m_nHeight=nY;
	m_nByteWidth=m_nWidth*3;

	if (m_nByteWidth%4) 
	{
		m_nByteWidth+=4-(m_nByteWidth%4);
	}

	if (m_pbtBits)
	{
		delete m_pbtBits;
	}

	m_pbtBits=new BYTE[m_nByteWidth*m_nHeight];
	memcpy(m_pbtBits,pBits,m_nByteWidth*m_nHeight);

	if (nX>320 || nY>300)
	{
		SetScroll(nX,nY);
	}
	else
		SetScroll(0,0);

	Invalidate();
}

void CImageWnd::SetScroll(int nX, int nY)
{
	m_nHScrollPos=0;
	m_nHCurPos=0;
	m_nVScrollPos=0;
	m_nVCurPos=0;
	SetScrollPos(SB_HORZ,0);
	SetScrollPos(SB_VERT,0);
	SCROLLINFO sinfo;
	sinfo.cbSize=sizeof(SCROLLINFO);
	sinfo.fMask=SIF_PAGE|SIF_RANGE;
	sinfo.nMin=0;
	//HScroll
	sinfo.nMax=nX-1;
	sinfo.nPage=302;
	SetScrollInfo(SB_HORZ,&sinfo);
	m_nHScrollMax=nX-302;
	//VScroll
	sinfo.nMax=nY-1;
	sinfo.nPage=222;
	SetScrollInfo(SB_VERT,&sinfo);
	m_nVScrollMax=nY-222;
}


int CImageWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;	
	// TODO: Add your specialized creation code here
	return 0;
}

⌨️ 快捷键说明

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