版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/guanyuqiu/article/details/53066008
1.打开文件
static char BASED_CODE szFilter[]=
"ALL Files (*.*)|*.*||";
CFileDialog dlgFileOpen( TRUE,
NULL,
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
szFilter,
this );
if ( IDOK == dlgFileOpen.DoModal() )
{
strcpy( m_InFile, dlgFileOpen.m_ofn.lpstrFile);;
pFile = fopen(m_InFile, "rb+");
}
2.Picture Control 显示视频
实际是显示图片,利用ontimer循环进行显示
头文件.h
afx_msg void OnBnClickedOpenFile1();
afx_msg void OnBnClickedOpenFile2();
char m_InFile1[255];
char m_InFile2[255];
FILE *pFile1;
FILE *pFile2;
afx_msg void OnBnClickedRun();
afx_msg void OnTimer(UINT_PTR nIDEvent);
int m_nFlag_Read1;
int m_nFlag_Read2;
IplImage* m_pImage1;
IplImage* m_pImage2;
unsigned char *pFileImage1;
unsigned char *pFileImage2;
CDC* m_pDC1;
HDC m_hDC1;
CRect m_rect1;
CDC* m_pDC2;
HDC m_hDC2;
CRect m_rect2;
CStatic m_pShowImage1;
CStatic m_pShowImage2;
CStatic* m_pResultShow1;
CStatic* m_pResultShow2;
.cpp文件
BOOL CViewDifferenceDlg::OnInitDialog()
{
// TODO: 在此添加额外的初始化代码
m_pImage1 = cvCreateImage(cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1);
m_pImage2 = cvCreateImage(cvSize(WIDTH,HEIGHT), IPL_DEPTH_8U, 1);
pFileImage1 = (unsigned char*)malloc(sizeof(unsigned char)*SIZE);
pFileImage2 = (unsigned char*)malloc(sizeof(unsigned char)*SIZE);
m_pResultShow1 = (CStatic*)GetDlgItem(IDC_SOURCE1);
m_pResultShow1->GetClientRect(&m_rect1);
m_pDC1 = m_pResultShow1->GetDC();
m_hDC1 = m_pDC1->GetSafeHdc();
m_pResultShow2 = (CStatic*)GetDlgItem(IDC_SOURCE2);
m_pResultShow2->GetClientRect(&m_rect2);
m_pDC2 = m_pResultShow2->GetDC();
m_hDC2 = m_pDC2->GetSafeHdc();
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CViewDifferenceDlg::OnBnClickedRun()
{
// TODO: Add your control notification handler code here
SetTimer(1,25,NULL);
}
void CViewDifferenceDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CvvImage cvImage;
switch(nIDEvent)
{
//8位
case 1:;
if ((m_nFlag_Read1 == SIZE)&&(m_nFlag_Read2 == SIZE))
{
memcpy(m_pImage1->imageData,pFileImage1, sizeof(unsigned char)*SIZE);
memcpy(m_pImage2->imageData, pFileImage2, sizeof(unsigned char)*SIZE);
cvImage.CopyOf(m_pImage1,1);
cvImage.DrawToHDC(m_hDC1, m_rect1);
cvImage.CopyOf(m_pImage2,1);
cvImage.DrawToHDC(m_hDC2, m_rect2);
m_nFlag_Read1 = fread(pFileImage1, sizeof(unsigned char), SIZE, pFile1);
m_nFlag_Read2 = fread(pFileImage2, sizeof(unsigned char), SIZE, pFile2);
}
else
{
fclose(pFile1);
fclose(pFile2);
free(pFileImage1);
free(pFileImage2);
cvReleaseImage(&m_pImage1);
cvReleaseImage(&m_pImage2);
}
break;
default:
break;
}
CDialog::OnTimer(nIDEvent);
}
3.画线
POINT pDrawPoint1,pDrawPoint2;
pen.CreatePen(PS_SOLID,2,RGB(255,255,0));
pOldPen = m_pDC->SelectObject(&pen);
m_pDC->MoveTo(pDrawPoint1);
m_pDC->LineTo(pDrawPoint2);
m_pDC->SelectObject(pOldPen);
pen.DeleteObject();
4. 画框
CPen pen;
CPen *pOldPen;
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
font.CreateFont(14,0,0,0,FW_MEDIUM,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"Arial");
CFont *poldfont = m_pDC->SelectObject(&font);
pen.CreatePen(PS_SOLID,2,RGB(255,255,0));
pOldPen = m_pDC->SelectObject(&pen);
m_pDC->SelectObject(pBrush);
left = m_Process.m_pBlob[i].BlobRect.nLeft * m_rect.Width() / m_nWidth;
up = m_Process.m_pBlob[i].BlobRect.nTop * m_rect.Height() / m_nHeight;
right = m_Process.m_pBlob[i].BlobRect.nRight* m_rect.Width() / m_nWidth;
bottom = m_Process.m_pBlob[i].BlobRect.nBottom *m_rect.Height() / m_nHeight;
m_pDC->Rectangle(left, up, right, bottom);
m_pDC->SelectObject(pOldPen);