충북대학교 컴퓨터 그래픽스 연구실 3학기 김일수 작성

Slides:



Advertisements
Similar presentations
1/ 편집 기능 사용하기 – 실습 1 글자 모양을 바꾸고 싶은 곳을 블록 설정 [ 글자 모양 ] 대화 상자에서 [ 글꼴 ] ‘ 궁서체 ’, [ 글자 색 ] ‘ 토마토색 ’ 으로 선택 → [ 설정 ] 클릭 → 글자 모양 변경.
Advertisements

Term project. Touch-screen 활용 그림판 –Touch-screen 을 입력장치로 하여 LCD 상에 그림을 그리는 프로그램 – 터치 입력을 절대 좌표로 받는 디바이스 /dev/touch 를 만들어 응용 프 로그램에서 수행하도록 함. –User interface.
컴퓨터와 인터넷.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
4장 영상 입출력 프로그램 만들기 비트맵 파일, MDI를 이용한 입출력 프로그램 (THU)
Chapter04 캔버스(2) HTML5 Programming.
파워포인트 2007.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
윈도우의 화면 출력 원리를 이해한다. CDC 클래스를 이용한 화면 출력 기법을 배운다.
Image & Video processing
제14장 동적 메모리.
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
최윤정 Java 프로그래밍 클래스 상속 최윤정
윤 홍 란 다이알로그(대화상자) 윤 홍 란
제 9 장 구조체와 공용체.
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
공통 컨트롤의 종류와 특징을 개관한다. 각종 공통 컨트롤의 사용 방법을 익힌다..
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Visual C++ Programming How to draw 3
5장. 참조 타입.
8장. 원격지 시스템 관리하기.
Lecture 3 Graphics with GDI
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
충북대학교 컴퓨터 그래픽스 연구실 3학기 김일수
LCD 모듈의 특징 LCD 컨트롤러 내장으로 모든 디스플레이 기능을 명령어로 제어 8비트 혹은 4비트로 인터페이스
MicroC/OS-II 3. Memory Management ITISN Technical Lab.
컴퓨터 프로그래밍 : 실습3 2장 데이터와 식.
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
CHAP 12. 리소스와 보안.
10장 컴퓨터 기반 데이터 획득 응용 프로그램 LabVIEW 사용법
C#.
JAVA Canvas Swing.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Chapter03 캔버스(1) HTML5 Programming.
홀인원2.0 설치 메뉴얼.
영상처리 실습 인공지능연구실.
Lesson 2. 기본 데이터형.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
윈도우 컨트롤.
파워포인터 활용 수영문화센터 전명복 만듦.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Clipping 이진학.
제4강 처리장치 1.
CHAP 21. 전화, SMS, 주소록.
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
그래픽 메소드.
05. 그래픽 빨간색 사각형 그리기 그래픽 그리기 발 표 자 : 07 정 경 오.
컴퓨터 구성요소와 사용 컴퓨터 문서 작업 인터넷 활용
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
3. 모듈 (5장. 모듈).
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
06. 디바이스의 등록과 해제 김진홍
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
Power Point 예제 디자인 적용 (서식) - (디자인적용) - (원하는 디자인 선택)
그래픽 컨트롤 (Graphic Control)
6 객체.
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
BoardGame 보드게임 따라가기.
Presentation transcript:

충북대학교 컴퓨터 그래픽스 연구실 3학기 김일수 작성 그래픽 처리 충북대학교 컴퓨터 그래픽스 연구실 3학기 김일수 작성

그래픽 처리 GDI의 개념 Graphic Device Interface *윈도우가 하드웨어를 제어할 수 있도록 응용 프로그램에 제공하는 모든 기능 *응용 프로그램과 디바이스 드라이버의 중간 역할 *응용 프로그램에 대한 독립적인 그래픽 동작 수행 < 그래픽 처리 > 2004-03-16

그래픽 처리 GDC(Graphic Device Context)이란? *디스플레이나 프린터와 같은 장치의 그리기 속성에 관한 정보를 가지고 있는 윈도우 자료 구조체 *선, 도형, 그림과 관련된 옵션들을 DC에 모아놓고 그래픽 함수는 이 DC 값을 참조 (default 사용 가능) *MFC에서는 CDC, CClientDC, CWindowDC, CPaintDC, CMetaFileDC등 다양한 DC 제공 *DC는 GDI가 제공하는 시스템 자원(운영체계는 각 윈도우 마다 DC를 가짐). *독립적인 하드웨어 출력을 할 수 있어 출력 장치에 상관없이 동일한 방법으로 출력을 설정 *DC를 얻고 나면, 반드시 작업 완료시 해제 < 그래픽 처리 > 2004-03-16

그래픽 처리 CDC의 파생 클래스 *CDC 클래스는 에플리케이션 프로그램에서 화면을 컨트롤하는 핸들을 포함 하고 화면에 관계되는 여러 함수를 내장하고 있는 클래스 < 그래픽 처리 > 2004-03-16

그래픽 처리 CDC 클래스 얻기 (1)OnDraw()함수, OnPaint()함수를 이용 OnDraw() 함수의 인자 - CDC 오브젝트 Void KisView:: OnDraw(CDC * pDC) { … } OnPaint() 함수 내의 CPaintDC 오브젝트 Void KisView::OnPaint() CPaintDC dc(this) *윈도우나 클라이언트 영역이 다시 그려져야 할 경우 수행 DC의 해제 는 MFC 내부 코드에 존재한다. < 그래픽 처리 > 2004-03-16

그래픽 처리 (2)GetDC() 함수의 이용 *이 함수의 포인터 반환값을 받아서 사용 *ReleaseDC()함수를 호출하여 반드시 해제 *사용 예 CDC *pDC = GetDC(); … ReleaseDC(pDC); *이 방법으로 DC를 얻는 것은 일시적인 것으로 윈도우의 크기가 변하면 출력한 내용이 사라진다. < 그래픽 처리 > 2004-03-16

그래픽 처리 (3)CClientDC 클래스의 이용 *CDC 클래스의 파생 클래스 *Device Context의 생성/해제 자동적 수행 1.생성자 함수에서 GetDC()함수를 호출 2.소멸자 함수에서 ReleaseDC()함수를 호출 *윈도우에 대한 핸들값이 필요 *일시적으로 윈도우의 클라이언트 영역에서 그래픽 개체를 사용할 경우에 이용 *사용 예 CClientDC dc(this) … < 그래픽 처리 > 2004-03-16

그래픽 처리 (4)CWindowDC를 이용 *윈도우(프레임) 영역에 그래픽 요소를 출력하고자 할 때 사용한다. *GetWindowDC()함수를 이용하여 CWindowDC 클래스의 인스턴스를 포인터 형태로 넘겨 받아 이용 *작업 수행 후, ReleaseDC()함수로 해제 *사용 예 CWindowDC *pDC = GetWindowDC(); … ReleaseDC(pDC); < 그래픽 처리 > 2004-03-16

그래픽 처리 그래픽 객체 *GDI 기본 구성 요소 그래픽 개체라는 의미는 화면에 그림을 그리거나 문자를 출력할 때 사용하는 객체를 의미 펜과 브러시, 폰트 비트맵 등을 핸들링하는 핸들들을 그래픽객체라고 하며, 이 핸들을 가지고 있는 클래스를 그래픽 객체 클래스라고 함. *GDI 기본 구성 요소 (1)선과 곡선(Lines and Curves) 직선, 사각형, 타원, 호, 베지어 곡선 (2)채워진 영역(Filled Areas) 브러시 개체를 이용 – 색상, 패턴, 비트맵 이미지 (3)비트맵(Bitmaps) 디스플레이 장치의 픽셀과 일치하는 직사각형 배열 래스터 그래픽의 기본적인 도구 (4)텍스트(Text) < 그래픽 처리 > 2004-03-16

그래픽 처리 화면에 그래픽 출력하기위한 요소 GDI 객체 GDI 객체 클래스 기본값 사용 용도 펜 CPen 검정색, 실선, 1픽셀 크기 점, 선, 테두리 브러시 CBrush 무늬없는 흰색 내부(영역) 채우기 폰트 CFont 시스템 폰트 문자의 폰트 비트맵 CBitmap 없음 비트맵 출력 영역 CRgn 영역 만들기, 변경하기 팔레트 CPalette 팔레트 조작 < 그래픽 처리 > 2004-03-16

그래픽 처리 Blue 0~255 Zero Green 0~255 Red 0~255 색(COLOR)   COLORREF RGB( // COLORREF : 데이터 type BYTE bRed, // red component of color BYTE bGreen, // green component of color BYTE bBlue // blue component of color ); RGB 매크로 정의  #define RGB (r, g, b) ((DWORD) (((BYTE) (r) | \ ((WORD) (g) << 8)) | (((DWORD) (BYTE) (b)) << 16))) 윈도우는 색상을 표현하기 위해 4byte를 사용  1byte 3byte 색상표현 일반적으로 사용하지 않는다. (윈도우 RGB 칼라와 16칼라 이상을 지원하는 비디오 디바이스에 대한 칼라 팔레트를 구분하기 위해 사용) RGB 매크로로 표현할 수 있는 색상  256*256*256 = 16,777,216 color Blue 0~255 Zero Green 0~255 Red 0~255 < 그래픽 처리 > 2004-03-16

그래픽 처리 GDI 객체를 사용하는 방법 (1) GDI 객체를 생성 * Create 계열 함수 이용 (2) 객체를 Device Context에 등록 * SeleteObject() 함수 이용 * 기존 설정된 객체는 포인터로 저장 (3) Device Context를 사용하여 그래픽 출력 (4) 이전 객체로 환원 (5) 객체를 삭제 * DeleteObject() 함수 이용 < 그래픽 처리 > 2004-03-16

그래픽 처리 펜 (Pen) ※선이나 영역의 경계선을 그릴 때 사용 ※선의 두께, 선이 색상, 선의 스타일 설정 CPen::CreatePen  BOOL CreatePen ( int nPenStyle, int nWidth, COLORREF crColor );  BOOL CreatePen ( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL );  Parameters  nPenStyle 펜의 스타일,  nWidth 펜의 두께  crColor 펜에 대한 RGB 색상,  pLogBrush LOGBRUSH 구조체에 대한 포인터  nStyleCount lpStyle 파라미터에 의해 가리키는 스타일의 길이를 기술한다.  lpStyle doubleword 값의 배열을 가리킨다. < 그래픽 처리 > 2004-03-16

그래픽 처리 펜(CPen) 스타일 펜의 스타일 내 용 모 양 PS_SOLID 실선 PS_DASH 파선 PS_DOT 점선 PS_DASHDOT 일점 쇄선 PS_DASHDOTDOT 이점 쇄선 PS_NULL 선을 그리지 않음 < 그래픽 처리 > 2004-03-16

그래픽 처리 펜(CPen)의 사용법 ① CPen pen, *oldpen; pen.CreatePen(PS_SOLID, 1,RGB(0,0,0)); ② oldpen=pDC->SelectObject(&pen); ③ pDC->Ellipse(0,0,10,10); ④ pDC->SelectObject(oldpen); ⑤ pen.DeleteObject(); < 그래픽 처리 > 2004-03-16

그래픽 처리 브러쉬(Brush) ※ 영역의 내부를 채울 때 사용 ※ 채울 색, 패턴등이 사용 (1) CreateSolidBrush() 함수 ※ 단일 색으로 칠하는 브러시를 생성하는 함수 (2) CreateHatchBrush() 함수 ※ 일정한 패턴을 가진 해치 브러시를 생성하는 함수. ※ 해치 브러쉬의 스타일 < 그래픽 처리 > 2004-03-16

그래픽 처리 해치 브러시의 스타일 내 용 모 양 HS_BDIAGONAL 오른쪽에서 왼쪽으로 45도 내려가는 빗금 HS_CROSS 십자가 형태의 빗금 HS_DIAGCROSS X자 형태의 빗금 HS_FDIAGONAL 왼쪽에서 오른쪽으로 45도 내려가는 빗금 HS_HORIZONTAL 수평으로 빗금 HS_VERTICAL 수직으로 빗금 < 그래픽 처리 > 2004-03-16

그래픽 처리 브러쉬(Brush)의 사용법 ① CBrush brush, *oldbrush; brush.CreateSolidBrush(RGB(0,0,0)); brush.CreateHatchBrush(HS_CROSS,RGB(0,0,0)); ② oldbrush=pDC->SelectObject(&brush); ③ pDC->Ellipse(0,0,10,10); ④ pDC->SelectObject(oldbrush); ⑤ brush.DeleteObject(); < 그래픽 처리 > 2004-03-16

그래픽 처리 폰트(Font) ※ Cfont 클래스를 이용하는 객체로 문자를 출력할 때 사용하며 글자의 모양, 크기가 설정 ※ 폰트를 사용하는 방법 (1)폰트를 출력하기 위해서는 원하는 폰트에 대해 논리적인 폰트를 LOGFONT타입으로 기술하여 생성하고 DC에 폰트를 선택하여 넣는다. (2)윈도우 GDI 의 폰트 맵퍼가 시스템에 설치되어 있는 폰트들 중에 가장 가까운 물리적인 폰트를 찾아 출력한다. < 그래픽 처리 > 2004-03-16

그래픽 처리 < 그래픽 처리 > typedef struct tagLOGFONT { LONG lfHeight; // 문자 셀이나 문자의 논리적 높이 LONG lfWidth; // 글꼴 내의 문자들의 평균 논리적 너비 LONG lfEscapement; // 폰트에 쓰여진 텍스트의 각 라인의 각도( 1/10도 ) LONG lfOrientation; // 각 문자의 기준선의 각도 ( 1/10도) LONG lfWeight; // 글꼴의 무게 (0-1000 사이) BYTE lfItalic; // TRUE 이면 이태릭체 BYTE lfUnderline; // TRUE 이면 밑줄 BYTE lfStrikeOut; // TRUE 이면 취소선 BYTE lfCharSet; // 글꼴의 문자 집합 BYTE lfOutPrecision; // 출력 정밀도. BYTE lfClipPrecision; // 클리핑 정밀도. 클리핑 경계에 있는 문자들을 처리하는 방법을 정의한다. BYTE lfQuality; // 출력 품질 BYTE lfPitchAndFamily; // 글꼴의 피치와 계열 CHAR lfFaceName[LF_FACESIZE]; // 32자로 제한된 문자열. 글꼴의 서체 이름을 나타낸다. } LOGFONT; < 그래픽 처리 > 2004-03-16

그래픽 처리 ※ CreateFontIndirect 를 사용하여 바탕체 폰트를 만드는 예 char temp[80] strcpy(temp, “바탕체”); LOGFONT logfont={10, 10, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, temp[0]}; Font,CreateFontIndirect(&logfone); < 그래픽 처리 > 2004-03-16

그래픽 처리 비트맵(Bitmap) ※ CBitmap클래스를 이용하는 객체로 비트맵을 생성하거나 읽어서 비트맵을 출력할 때 사용 < 그래픽 처리 > 2004-03-16

그래픽 처리 흑백에서의 비트 연산 예 원본 그림 COPY OR AND XOR Ex) pDC->SetRop2(R2_XORPEN); //그래픽을 출력한다. 1 < 그래픽 처리 > 2004-03-16

그래픽 처리 비트맵의 사용법 ① 화면 DC와 메모리 DC를 생성 ② 화면 DC와 호환성을 갖는 DC를 만든다. CClinetDC dc(this); CDC memdc; ② 화면 DC와 호환성을 갖는 DC를 만든다. memdc.CreateCompatibleDC(&dc); ③ 비트맵을 읽어온다 CBitmap bitmap, *oldbitmap; Cbitmap.LoadBitmap(IDB_BITMAP1); ④ 메모리 DC에 비트맵을 설정한다. Oldbitmap=memdc.SelectObject(&bitmap); ⑤ 비트맵 블록을 전송한다. dc.BitBlt(0,0,450,85,&memdc,0,0,SRCCOPY); ⑥ DC를 복원한다. memdc.SelectObject(oldbitmap); < 그래픽 처리 > 2004-03-16

그래픽 처리 펜과 브러쉬를 이용한 그래픽 함수 (CDC 클래스의 멤버함수) 그리기 기능 MoveTo, LineTo 선 Rectangle, FillRect, FrameRect, Draw3dRect 사각형 Ellipse 타원 Pie 파이 Arc 호 Polygon 다각형 PolyDraw, PolyBezier, PolyBezierTo 베이지어 곡선 FrameRgn 영역의 경계선 < 그래픽 처리 > 2004-03-16

그래픽 처리 그래픽 예제 < 그래픽 처리 > 2004-03-16

그래픽 처리 < 그래픽 처리 > 2004-03-16