Please Enable JavaScript!
Gon[ Enable JavaScript ]

OpenCV 를 이용해 MFC 컨트롤(Static Control) 이미지 표현 하기

기타 언어/C# & MFC
반응형

OpenCV 를 이용해 MFC 컨트롤(Static Control) 이미지 표현 하기

 

개발환경 : window 7 32bit, Visual Studio 2010

 

(1) 이미지 로딩과 소멸

 

다이얼 로그 프로젝트를 만든다. 그리고 Static Control 를 하나

추가하고 이미지를 출력하기 위한 실행 버튼을 만들자. 

 Dialog 헤더파일에 이미지표현을 위한 객체를 선언한다.

IplImage* m_pImage;
CvvImage m_cImage;

 

OPEN 버튼 클릭시 실행할 내용이다.

m_pImage 객체가 NULL 이 아니라면 cvReleaseImage 로 소멸시킨다.

다음은 cvLoadImage 로 원하는 이미지 파일을 로딩하고 그 리턴값을

m_pImage 에 저장한다.

그리고 Static 영역을 새로 그리기위해 InvalidateRect 를 호출한다.

그러면 OnPaint 함수가 호출 될것이다. 여기에 리턴 받은 m_pImage

를 그려 넣으면 된다
void COpenCVSampleDlg::OnBnClickedBtnOpen()
{
	if (m_pImage != NULL)
	{
		cvReleaseImage(&m_pImage);
	}

	m_pImage = cvLoadImage("test.jpg", -1);

	
	Invalidate(FALSE);
}

 

다음은 다이얼로그가 종료 되었을 때 m_pImage 객체를 소멸시키는

코드를 입력하자.

BOOL COpenCVSampleDlg::DestroyWindow()
{
	if (m_pImage != NULL)
	{
		cvReleaseImage(&m_pImage);
	}

	return CDialogEx::DestroyWindow();
}

 

(2) 이미지 표현

 

이제 실제적으로 그리는 부분인 OnPaint 함수에 대한 내용이다.

Static CDC와 범위를 얻고 CvvImage::CopyOf, CvvImage::DrawToHDC

두 함수를 이용해 지정한 영역에 그려넣는 내용이다.

리턴받은 CDC ReleaseDC 를 통해 소멸시켜 준다.

if (m_pImage)
{
	CRect rt;
	CDC *pStaticDC = GetDlgItem(IDC_STATIC_VIEW)->GetDC();
	GetDlgItem(IDC_STATIC_VIEW)->GetClientRect(&rt);
	m_cImage.CopyOf(m_pImage);
	m_cImage.DrawToHDC(pStaticDC->m_hDC, &rt);

	ReleaseDC(pStaticDC);
}

 

아래 그림은 위의 소스를 통해 표현한 장면이다.

반응형
Posted by 녹두장군1
,