일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- matlab 영상처리
- c++공부
- 팀프로젝트
- 파이토치 강의 정리
- 파이토치 김성훈 교수님 강의 정리
- tensorflow 예제
- 미디언 필터링
- c언어
- MFC 프로그래밍
- 케라스 정리
- 딥러닝
- 해리스 코너 검출
- 모두의 딥러닝 예제
- 골빈해커
- 딥러닝 스터디
- C언어 공부
- 컴퓨터 비전
- 김성훈 교수님 PyTorch
- 모두의 딥러닝
- c++
- Pytorch Lecture
- 딥러닝 공부
- 파이토치
- object detection
- pytorch
- TensorFlow
- c언어 정리
- 영상처리
- 가우시안 필터링
- pytorch zero to all
- Today
- Total
ComputerVision Jack
[MFC프로그래밍 - Chapter3] 본문
디바이스 콘텍스트
CProjectView 클래스
뷰 윈도우 영역을 관리하는 클래스. ProjectView.h 파일과 ProjectView.cpp파일로 구성된다.
OnDraw() 함수
윈도우에 WM_PAINT 메시지가 발생하면 수행된다.
WM_PAINT메세지가 발생하는 경우
- 애플리케이션이 수행되기 시작하여 윈도우가 처음 등장할 때
- 윈도우가 최소화 되었다가 회복되어 화면에 등장할 때
- Invalidate()함수를 호출하여 윈도우를 무효화 할 때
OnDraw() 함수에는 포인터 값이 매개변수로 전달된다. 포인터를 따라가면 디바이스 콘텍스트 객체인 CDC객체가 있다.
OnDraw()에 넘겨지는 CDC 객체의 출력 영역은 애플리케이션의 프레임 윈도우 내 사각형 영역인 뷰 영역이다.
예제 : 텍스트 출력하기
텍스트 출력 함수
- TextOut() - 특정 좌표를 주고 기준 문자열을 출력한다.
- DrawText() - 박스 영역을 주고 그 안에 출력한다.
출력 위치를 지정하는 방식에 차이가 존재한다.
CRect 클래스
박스 영역을 지정할 때 사용하는 클래스
DrawText()함수를 사용할 때, CRect 클래스를 이용하여 박스 영역을 넘겨준다.
nFormat 인자를 통하여 문자열 위치를 잡아줄 수 있다.
키보드 메세지 처리하기
키보드에서 키가 눌리고나 떼는 이벤트가 발생하면 이벤트 처리함수를 통해서 제어를 한다.
- WM_CHAR
- WM_KEYDOWN
- WM_KEYUP
문자 키가 눌릴 경우 KEYDOWN 메세지 다음에 CHAR메세지가 발생한다.
CString 클래스
문자열을 저장 및 관리하기 위한 자료구조. 문자열 저장 공간에 대한 접근을 제한하면서 오류를 줄여준다.
윈도우 영역 무효화 함수
Invalidate() 함수
함수를 호출할 경우 윈도우의 뷰 영역을 무효화 한다.
뷰의 영역에 이미 출력된 것을 삭제한다.
예제 : 윈도우에 입력된 문자열 출력하기
- OnChar() 함수 - 입력된 문자열을 변수에 저장 (WM_CHAR)
- OnDraw() 함수 - 문자열 변수에 저장된 내용 출력 (WM_PAINT)
마우스 이용하여 그리기
마우스도 키보드와 마찬가지로 마우스 이벤트가 발생하면 이벤트 메세지에 따라서 처리 핸들러를 제작하면 된다.
- WM_LBUTTONDOWN
- WM_LBUTTONUP
- WM_RBUTTONDOWN
- WM_RBUTTONUP
- WM_MOUSEMOVE
마우스 메세지와 함께 nFlags (키보드 /마우스 상태 정보) 변수도 함께 전달한다.
예제 : 직선그리기
- MoveTo() 함수 - 시작점으로 포인트를 옮기는 함수
- LineTo() 함수 - 직선 그리는 함수, 현재 위치부터 마지막 지점까지 선을 그린다.
예제 : 색상 선택 후 직사각형 그리기
CPen 클래스
선을 그릴 때 사용하는 그래픽 객체 생성
CPen::CreatePen() 함수를 이용하여 펜을 만들고 디바이스 콘텍스트에 등록하여 사용 가능하다.
SelectObject() 함수를 사용하여 생성한 펜을 집는다. 그래픽 객체인 펜을 반환한다.
그리기를 마무리한 후 CPen::DeleteObject() 함수를 사용하여 펜을 삭제한다.
원 그리기 함수
Ellipse() 함수를 통하여 타원을 그릴 수 있다. 기본적으로 2개의 좌표 값이 필요하고
사각형 틀을 지정하여 그안에 내접하는 원을 그린다.
예제 : 브러쉬 선택후 원 그리기
CBrush 클래스
선을 그릴 때 사용하는 그래픽 객체이며 내부를 채색할 때 사용된다.
다각형 그리기
다각형과 다각선은 점과 직선으로 구성된다.
Polyline() 함수를 통하여 다각선을 그리고 Polygon() 함수를 이용하여 다각형을 만든다.
CClientDC 클래스
다른 함수에서 뷰 영역에 문자나 그림을 출력하는 것을 도와주는 객체를 생성하는 클래스
CClientDC dc(this); 통하여 어떤 멤버함수든 출력할 수 있다.
레스터 연산
레스터 연산
CClientDC를 이용할 때, 가장 많이 사용하는 연산
윈도우의 배경색과 그리는 색 사이에 논리 연산을 하고 결과로 얻는 색을 가지고 그림을 그리는 방법
- R2_COPYPEN
- R2_NOT
- R2_NOTCOPYPEN
- R2_NOTXORPEN
- R2_XORPEN
레스터 연산을 이용하면, 특정 도형을 윈도우 내에서 지우고 새로운 좌표에 다시 그릴 때 편리하다.
화면 깜빡임이 줄어든다.
'Image Processing > MFC Programming' 카테고리의 다른 글
[MFC프로그래밍 - Chapter6] (0) | 2020.02.25 |
---|---|
[MFC프로그래밍 - Chapter5] (0) | 2020.02.24 |
[MFC프로그래밍 -Chapter4] (0) | 2020.02.21 |
[MFC프로그래밍 - Chapter2] (0) | 2020.02.12 |
[MFC프로그래밍 - Chapter1] (0) | 2020.02.11 |