Microsoft PowerPoint - hci2-lecture11.ppt [호환 모드]

Similar documents
(Microsoft PowerPoint - hci2-lecture11 [\310\243\310\257 \270\360\265\345])

C# 입문 : 이론과 실습

PowerPoint Presentation

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

(Microsoft PowerPoint - C#\260\355\261\3363\(WinForm\).ppt)

디지털영상처리3

PowerPoint Presentation

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

쉽게 풀어쓴 C 프로그래밍

PowerPoint Template

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint Presentation

Microsoft PowerPoint - 07-C#-12-GDI+.ppt [호환 모드]

JAVA PROGRAMMING 실습 08.다형성

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

gnu-lee-oop-kor-lec06-3-chap7

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 2강

쉽게 풀어쓴 C 프로그래밍

Structure and Interpretation of Computer Programs: Assignment 3 Seung-Hoon Na October 4, George (아래 3개의 문제에 대한 구현이 모두 포함된 george.rkt파일을 제출하시오.

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

디지털영상처리3

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Visual Basic 반복문

슬라이드 1

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint Presentation

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

PowerPoint Presentation

제8장 자바 GUI 프로그래밍 II

PowerPoint Template

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

1

Microsoft Word - cg07-midterm.doc

UI TASK & KEY EVENT

<4D F736F F D20C7C1B7CEB1D7B7A55FC3D6C8EFB9E85F4E4554BFA1BCADC0C B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D62E646F63>

쉽게 풀어쓴 C 프로그래밍

e-비즈니스 전략 수립

PowerPoint Presentation

C# 입문 : 이론과 실습

GDI의 개념

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

Chapter 6 Objects and Classes

슬라이드 1

Microsoft PowerPoint - logo_2-미해답.ppt [호환 모드]

Open GL

13 주차 - MDI, Exception, WebBrowser, RichTextBox, AlarmProgram 대림대학 년도 1 학기홍명덕

Design Issues

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

제11장 프로세스와 쓰레드

17장 클래스와 메소드

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

BMP 파일 처리

01-OOPConcepts(2).PDF

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

C++ Programming

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - 07-Data Manipulation.pptx

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

Microsoft PowerPoint 웹 연동 기술.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

Microsoft PowerPoint PythonGUI-sprite

이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다

PowerPoint Presentation

슬라이드 1

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

tiawPlot ac 사용방법

Microsoft PowerPoint - lec2.ppt

제 1장 C#의 개요

02 장. 글꼴문단지정하기 이번장에서는스타일시트속성중에서글꼴과관련한속성과문단에관련된속성을살펴보도록하자.

Microsoft PowerPoint - HS6000 Full HD Subtitle Generator Module Presentation

03장

설계란 무엇인가?

Microsoft PowerPoint - 06-Body Data Class.pptx

No Slide Title

UI TASK & KEY EVENT

gnu-lee-oop-kor-lec10-1-chap10

PowerPoint 프레젠테이션

슬라이드 1

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Microsoft PowerPoint - chap06-1Array.ppt

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

그래픽 프로그래밍

오버라이딩 (Overriding)

PowerPoint 프레젠테이션

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

4장기본프로그래밍2

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2

Transcription:

Overview C# GDI+ GDI (Graphical Device Interface) GDI+ 화면출력 Color, Pen, Brush, Image, Font, Graphics, etc Paint 이벤트, OnPaint() 메소드, Invalidate() 메소드 321190 2011 년가을학기 11/21/2011 박경신 GDI+ GDI (Graphical Device Interface) 그래픽객체의표현과출력장치에서의출력방법에대한 Windows 표준으로그래픽주변장치의종류에상관없이응용프로그램에서그래픽출력하는데필요한모든것을지원하는 C 수준의 API 장치독립적 : 모니터, 비디오카드, 프린터출력에사용되는주변장치가변경되는경우에도프로그램을수정할필요가없어야함 DC(Device Context): GDI가생성하고관리하는데이터구조체 GDI+.NET 환경에서이전의 GDI 기능을확장한것이 GDI+ 응용프로그램 장치독립적 GDI 장치의존적출력장치 ( 모니터, 프린터등 ) GDI+ GDI 단점 기본적인그래픽출력만가능함 그래픽속성을바꿀때마다 GDI 개체를일일이생성선택한후사용해야함 실수로 GDI 개체를해제하지않은경우리소스누출에의해시스템의안정성을위협함 GDI+ GDI+ 는 GDI 기능을개선한 Native C++ 언어로작성된클래스라이브러리 GdiPlus.dll를사용하여하위버전의운영체제 (Windows 95/98) 에서도문제없이잘실행되는향상된호환성을제공 VC++ Win32나 MFC에서 GDI+ 사용가능 초기화과정은필요함.NET에서는 GDI+ 가기본출력엔진이므로별도의초기화과정은필요하지않음

GDI+ 화면출력 GDI+ 화면출력 Graphics 클래스 : 모든그리기기능은단독으로존재하는함수가아니라 Graphics 클래스의메소드로정의되어있음 GDI에서 DC 를먼저발급받아야만출력이가능한원리와동일함 GDI의 DC에서는출력속성들이모두들어있는데반해 GDI+ 의 Graphics 객체는도형의속성을가지지않음 GDI에서선을그리려면 Pen을 DC에선택한후선을그리기함수를사용하여출력한후 Pen 선택을해제해야함 GDI+ 에서는 Pen 자체를선그리기메소드의인수로전달함 여러가지인수를받는 ( 즉, 오버로딩된 ) 그리기메소드를제공함 Pen, Brush 등 GDI 객체들은모두 C++ 객체이므로해제코드를별도로작성할필요가없음 GDI+ 에서사용하는모든문자열은 Unicode이어야함 문자형은반드시 WCHAR 형으로선언해야함 문자열상수앞에는접두 L을붙여야함 GDI+ 그래픽기능 System.Drawing 기본네임스페이스 GDI+ 의그래픽기능을제공하는클래스정의 GDI+ 2D 벡터그래픽 (vector graphic) 드로잉 점과선을기반으로한그래픽기능 ( 선, 사각형등 ) GDI+ 이미징 화소 (Pixel) 단위그림파일을편집하는기능 비트맵 (Bitmap) 등으로표현된사진이나그림편집 GDI+ 문자출력 시스템폰트를사용하여그래픽장치에문자출력기능 GDI+ 프린터출력 프린터장치에그래픽출력기능 상속계층구조 System.Object System.Drawing // 기본드로잉 System.Drawing.Design // Predefined 대화상자, 속성시트, UI System.Drawing.Drawing2D // 벡터그래픽그리기 System.Drawing.Imaging // 이미지 System.Drawing.Text // 폰트및텍스트 System.Drawing.Printing i ti // 프린트 상속계층구조 System.Object System.Drawing // 기본드로잉 System.Drawing.CharacterRange // 문자열내의문자위치의범위 System.Drawing.Color // ARGB 색 System.Drawing.Point // (X, Y) 점 System.Drawing.Rectangle // 사각형의위치와크기 System.Drawing.Size // 크기 System.Drawing.Graphics // 그래픽스 System.Drawing.Pen // 펜 System.Drawing.Brush // 브러시 System.Drawing.Bitmap // 비트맵 System.Drawing.Icon // 아이콘 System.Drawing.Image // 이미지 System.Drawing.Font // 폰트

System.Drawing System.Drawing 네임스페이스 System.Drawing System.Drawing 네임스페이스 주요구조체 Point Rectangle Size Color 주요클래스 Graphics Pen Brush Font Image (X, Y) 좌표값을저장하는구조체 사각형을그릴수있는두좌표값을저장하는구조체주어진 ( 높이, 너비 ) 를저장하는구조체 펜, 브러시, 폰트의색을지정하는구조체 GDI+ 의핵심클래스. 텍스트나이미지출력에사용선에대한스타일과색상등을결정사각형이나타원, 다각형등의내부를채우는데사용출력할글자의타입, 굵기, 크기, 효과등을지정 Bitmap, Icon, Cursor 등하위클래스에기능을제공하는추상클래스 주요클래스 Icon Cursor Bitmap ColorTranslator StringFormat 아이콘을담당커서를담당비트맵기능을처리색깔의표현형식을변환문자출력스타일에대한정보를처리 Point Point 구조체는화면상의한지점을나타내는데사용 Point 생성자및메소드 Rectangle Rectangle 구조체는사각형을그리는데사용 Rectangle 생성자및속성 생성자 Point() 기본생성자 Point(Int, Int) 지정된 (X, Y) 값을사용하여 Point 객체생성 Point(Point) 지정된점을사용하여 Point 객체생성 Point(Size) 지정된크기를사용하여 Point 객체생성 메소드 Equals 두개의 Point 좌표가같은지여부 operator+ 두개의 Point 좌표를더함 operator- 두개의 Point 좌표를뺌 생성자 Rectangle(Point, Size) Rectangle(x1, y2, x3, x4) 속성 Bottom Height IsEmpty Left Location 지정된 Point와 Size를사용하여사각형객체생성지정된점과크기를사용하여사각형객체생성아래가장자리의 Y 좌표높이 Rectangle의숫자가모두 0값을갖는지여부왼쪽가장자리의 X 좌표왼쪽위모퉁이의좌표

Size Size 구조체는높이, 너비를나타내는데사용 Size 생성자및속성 생성자 Size() Size(x, y) Size(Point) Size(Size) 속성 Height IsEmpty Width 기본생성자지정된 (X, Y) 값을사용하여 Size 객체생성지정된점을사용하여 Size 객체생성지정된크기를사용하여 Size 객체생성 높이 Rectangle의숫자가모두 0값을갖는지여부너비 Color Color 구조체는색상을표현 이름나 FromArgb를이용하여색상을지정가능 Color 생성자 생성자 Color() 기본생성자 (Black) Color(a, r, g, b) Alpha, Red, Green, Blue 값을지정하여 Color 객체 생성 Color(r, g, b) Red, Green, Blue 값을지정하여 Color 객체생성 Color(argb) 16진수 ARGB 상수값으로 Color 객체생성 Color C# 에서는자주쓰는색상들을 Color 클래스의속성으로제공하여이름으로색상지정 Color 구조체의 ARGB 상수를사용하여색상을지정 // 배경색과전경색에 Color 이름을사용한예 Color forecolor = Color.Black; Color backcolor = Color.White; FromArgb 메소드를사용한색상지정 RGB 값을조절하여유연하게색상을지정 알파혼합할수있는 FromArgb 메소드사용 빨간색을만들어 Color 객체에저장하는예 // FromArgb 메소드를사용한예 Color RedColor = Color.FromArgb(255,0,0); Pen Pen 객체를이용하여선 / 곡선의색, 굵기, 정렬및스타일을제어하는펜속성을설정가능 Pen 생성자 생성자 Pen(Brush) 지정된 Brush를사용하여 Pen 객체생성 Pen(Color) 지정된 Color를사용하여 Pen 객체생성 Pen(Brush, Width) 지정된 Brush와 Width를사용하여 Pen 객체생성 Pen(Color, Width) 지정된 Color와 Width를사용하여 Pen 객체생성 // 두께 3 의파란색 Pen 으로선을그리는예 Graphics g = CreateGraphics(); Pen p = new Pen(Color.Blue, 3); // Pen을생성하여 g.drawline(p, 10, 10, 200, 100); // 그래픽출력에 Pen을인자로전달 p.dispose(); // Pen 객체해지

Pen Pen 속성 속성 Color Pen 의색을가져오거나설정 DashCap Pen을사용하여그리는파선을구성하는대시의끝에사용되는캡스타일을가져오거나설정 DashStyle Pen 을사용하여그리는파선에사용될스타일을가져오거나설정 EndCap Pen을사용하여그리는선의끝에사용되는캡스타일을가져오거나설정 LineJoin Pen을사용하여그리는두개의연속선끝에사용되는결합스타일을가져오거나설정 PenType Pen을사용하여그리는선의스타일을가져오거나설정 StartCap Pen 을사용하여그리는선의시작에사용되는캡스타일을가져오거나설정 Width Pen의너비를가져오거나설정 Pen DashStyle 열거형 Solid Dash Dot DashDot DashDotDot DashCap 열거형 Flat Round Triangle // DashStyle 예제 Paint 이벤트핸들러 private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.graphics; Pen p = new Pen(Color.Black, 7); // 대시스타일테스트 p.dashstyle = DashStyle.Solid; g.drawline(p, 10, 10, 200, 10); p.dashstyle = DashStyle.Dash; Dash; g.drawline(p, 10, 30, 200, 30); p.dashstyle = DashStyle.Dot; g.drawline(p, 10, 50, 200, 50); p.dashstyle = DashStyle.DashDot; g.drawline(p, 10, 70, 200, 70); p.dashstyle = DashStyle.DashDotDot; g.drawline(p, 10, 90, 200, 90); // 대시와선의굵기테스트 p.dashstyle = DashStyle.Dot; for (int w = 1; w < 10; w += 2) { p.width = w; g.drawline(p, 10, 120 + w * 10, 200, 120 + w * 10); // DashCap 예제 Paint 이벤트핸들러 private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.graphics; Pen p = new Pen(Color.Black, 7); // 대시스타일테스트 p.startcap = p.endcap = LineCap.Flat; p.width = 10; p.dashstyle = DashStyle.Dash; p.dashcap = DashCap.Flat; g.drawline(p, 10, 30, 300, 30); p.dashcap = DashCap.Round; g.drawline(p, 10, 50, 300, 50); p.dashcap = DashCap.Triangle; g.drawline(p, 10, 70, 300, 70);

Pen StartCap/EndCap 열거형 LineCap.Flat LineCap.Round LineCap.Square LineCap.Triangle LineCap.NoAnchor LineCap.RoundAnchor LineCap.SquareAnchor LineCap.ArrowAnchor LineCap.DiamondAnchor // Pen StartCap/EndCap예제 Paint 이벤트핸들러 private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.graphics; Pen p = new Pen(Color.Black, 7); g.drawline(p, 10, 20, 300, 20); p.startcap = p.endcap = LineCap.Round; g.drawline(p, 10, 40, 300, 40); p.startcap = p.endcap = LineCap.Square; g.drawline(p, 10, 60, 300, 60); p.startcap = p.endcap = LineCap.Triangle; g.drawline(p, 10, 80, 300, 80); p.startcap = p.endcap = LineCap.NoAnchor; g.drawline(p, 10, 100, 300, 100); p.startcap = p.endcap = LineCap.RoundAnchor; g.drawline(p, 10, 120, 300, 120); p.startcap = p.endcap = LineCap.SquareAnchor; g.drawline(p, 10, 140, 300, 140); p.startcap = p.endcap = LineCap.ArrowAnchor; g.drawline(p, 10, 160, 300, 160); p.startcap = p.endcap = LineCap.DiamondAnchor; g.drawline(p, 10, 180, 300, 180); Brush Brush Brush 객체를사용하여도형에다양한패턴을채우기 Brush 생성자생성자 SolidBrush(Color) 가장간단한형식의단색 Brush HatchBrush(HatchStyle, Color) 미리설정된다양한패턴 Brush HatchBrush(HatchStyle, Color, Color) TextureBrush(Image, WrapMode) 지정된이미지를사용하는 Brush LinearGradientBrush( ) 그라데이션에따라혼합된두가지색을갖는Brush PathGradientBrush( ) 사용자정의한고유한경로에따라혼합된색의그라데이션 Brush HatchBrush HatchStyle : 52개패턴의종류를제공 forecolor : 패턴을구성하는선분들의색 backcolor : 패턴의배경색 HatcyStyle 열거형 HatchStyle 열거형 Horizontal Vertical BackwardDiagonal ForwardDiagonal Cross 등등

Brush // HatchBrush 예제 Paint 이벤트핸들러 private void Form1_Paint(object sender, PaintEventArgs e) { HatchStyle h = (HatchStyle)0; for (int y = 0; ; y++) { for (int x = 0; x < 8; x++) { HatchBrush b = new HatchBrush(h, Color.Black, Color.White); e.graphics.fillrectangle(b, x * 70, y * 70, 60, 60); h++; if (h > (HatchStyle)52) break; if (h > (HatchStyle)52) break; TextureBrush 이미지파일을읽어들여배경을칠하는브러시 WrapMode 열거형 WrapMode 열거형 Tile 같은이미지를바둑판모양으로반복 TileFlipX 같은이미지를수평으로반전된모양으로반복 TileFlipY 같은이미지를수직으로반전된모양으로반복 FileFlipXYFli 같은이미지를양방향으로반전된모양으로반복 Clamp 같은이미지를바둑판모양으로배열되지않음 // 이미지로타원내부를채우는예 Bitmap image1 = (Bitmap) Image.FromFile( test.bmp ); // 비트맵로딩 TextureBrush b = new TextureBrush(image1, WrapMode.Tile); g.fillellipse(b, new Rectangle(10, 10, 200, 100)); private int mode = 0; // TextureBrush예제 Paint 이벤트핸들러 private void Form1_Paint(object sender, PaintEventArgs e) { Image i = Image.FromFile("lotus.jpg"); TextureBrush b = new TextureBrush(i); if (mode == 0) b.wrapmode = WrapMode.Tile; else if (mode == 1) b.wrapmode = WrapMode.TileFlipX; else if (mode == 2) b.wrapmode = WrapMode.TileFlipY; else if (mode == 3) b.wrapmode = WrapMode.TileFlipXY; else if (mode == 4) b.wrapmode = WrapMode.Clamp; e.graphics.fillrectangle(b, ClientRectangle); string str = "WrapMode=" + b.wrapmode.tostring(); // 텍스트 e.graphics.drawstring(str, Font, Brushes.Red, 10, 10); // 텍스트출력 private void Form1_KeyPress(object sender, KeyPressEventArgs e) { if (e.keychar == ''){ // 스페이스바를누르면 mode 증가 mode++; if (mode >= 5) mode = 0; Invalidate(); // Invalidate를호출하여 Paint 이벤트발생시켜 Form1_Paint 호출 Brush PathGradientBrush 지정된경로에따라색상이점점변하는모양으로채색하는브러시 LinearGradientBrush 지정된두색상간에점점변하는모양으로채색하는브러시 LinearGradientBrush 주요생성자 생성자 LinearGradientBrush(Point, Point, 점과색을사용하여그라데이션객 Color, Color) 체생성 LinearGradientBrush(Rectangle, 사각형, 시작및끝색, 방향을기 Color, Color, LinearGradientMode) 반으로그라데이션객체생성 LinearGradientBrush(Rectangle, Color, Color, Single, Boolean) 사각형, 시작및끝색, 방향각도를기반으로그라데이션객체생성

private float angle = 0f; // LinearGradientBrush예제 Paint 이벤트핸들러 private void Form1_Paint(object sender, PaintEventArgs e) { LinearGradientBrush B1 = new LinearGradientBrush(new Point(0, 0), new Point(100, 100), Color.Blue, Color.Yellow); e.graphics.fillrectangle(b1, 0, 0, 300, 150); LinearGradientBrush B2 = new LinearGradientBrush(new Rectangle(0, 0, 100, 100), Color.White, Color.Black, angle); e.graphics.fillrectangle(b2, 0, 200, 300, 150); private void Form1_KeyDown(object sender, KeyEventArgs e) { switch (e.keycode) { // 위 / 아래화살표키를누르면그라디언트브러시의각도증감 case Keys.Up: angle += 5f; break; case Keys.Down: angle -= 5f; break; Invalidate(); // Invalidate를호출하여 Paint 이벤트발생시켜 Form1_Paint 호출 Image Image 클래스는래스터이미지 ( 비트맵 ) 와벡터이미지 ( 메타파일 ) 를처리하기위한메소드를제공 Bitmap 클래스는래스터이미지의로딩, 저장및조작 BMP, GIF, JPEG, EXIF, PNG, TIFF 형식 Metafile 클래스는벡터이미지의기록및검사 GDI+ 에서는메타파일을기록하고표시할수있도록 ( 그리기명령및설정시퀀스로저장되는이미지의 ) Metafile 클래스제공 윈도우메타파일 (WMF), 확장메타파일 (EMF), EMF+ 형식 주요기능 이미지그리기및위치지정 : Graphics 클래스의 DrawImage 사용 이미지복제 : Clone 사용 이미지자르기및배율조정 : Rectangle 클래스와 DrawImage 사용 이미지열기및저장 : Bitmap 클래스생성자또는 FromFile Fil 사용하여로딩하고, Save를사용하여저장 Image Image 클래스의주요메소드 메소드 FromFile 디스크의파일로부터이미지파일을로딩 FromStream 스트림으로부터이미지로딩 GetWidth 이미지의너비 GetHeight 이미지의높이 GetType 이미지의타입 ( 메타, 비트맵 ) RotateFlip 이미지를회전또는반전 GetRawFormat 이미지의포멧 Save 이미지를디스크의파일로저장 Image 이미지출력은 Graphics 클래스 DrawImage 를사용 DrawImage 메소드 DrawImage(Image, g Point) 지정된위치에원래크기의 Image 출력 DrawImage(Image, Int, Int) DrawImage(Image, Rectangle) DrawImage(Image, Int, Int, Int, 지정된위치에지정된크기로 Image 출력 ; 사각형영역에맞추어이미지확대 / 축 Int) 소 DrawImage(Image, g Point[], Int) 이미지를지정된위치에출력 DrawImage(Image, Int, Int, Int, Int, Int, Int, GraphicsUnit) (150,40) 이미지의일부분을지정된위치에지정된크기로출력 폭 220 높이 300

// DrawImage 예제 Paint 이벤트핸들러 private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.graphics; Image i = Image.FromFile("lotus.jpg"); switch (mode) { case 0: g.drawimage(i, 0, 0); break; case 1: g.drawimage(i, new Point(10, 10)); break; case 2: g.drawimage(i, g new Rectangle(10, 10, 300, 300)); break; case 3: g.drawimage(i, 0, 0, 300, 300); break; case 4: g.drawimage(i, 0, 0, 150, 300); break; case 5: g.drawimage(i, 0, 0, 300, 150); break; case 6: g.drawimage(i, 10, 10, new Rectangle(70, 20, 300, 320), GraphicsUnit.Pixel); break; case 7: g.drawimage(i, new Rectangle(10, 10, 200, 200), 70, 20, 300, 300, GraphicsUnit.Pixel); break; case 8: Rectangle r = new Rectangle(70, 20, 300, 320); Point[] pts = {new Point(0,0), new Point(300, 0), new Point(100, 200) ; g.drawimage(i, pts, r, GraphicsUnit.Pixel); break; Font f = new Font( 맑은고딕, 12); g.drawstring( g( 스페이스바를누르세요, f, Brushes.White, 10, 10); // 텍스트출력 Image Image 클래스의 Save 를사용하여이미지를파일로저장 Image.Save 메소드 Save(String) Image 를지정된파일이나스트림에저장 Save(Stream, ImageFormat) Image를지정된형식의지정된스트림에저장 Save(String, ImageFormat) Image를지정된형식으로지정된파일에저장 Save(Stream, ImageCodecInfo, 지정된인코더및이미지인코더매개변 EncoderParameters) 수를사용하여 Image를지정된스트림에저장 Save(String, ImageCodecInfo, EncoderParameters) 지정된인코더및이미지인코더매개변수를사용하여 Image 를지정된파일에저장 // DrawImage 예제이벤트핸들러 private void Form1_(object sender, PaintEventArgs e) { Graphics g = e.graphics; Bitmap Bitmap은이미지의픽셀데이터와그특성으로구성 Image는파일이나스트림으로부터생성가능 Bitmap은참조그래픽이나색상포맷정보만으로비어있는비트맵생성가능 Bitmap 생성자생성자 Bitmap(Image) 지정된이미지에서 Bitmap 객체생성 Bitmap(Stream) 지정된데이터스트림에서 Bitmap 객체생성 Bitmap(String) 지정된파일에서 Bitmap 객체생성 Bitmap(Image, Size) 지정된크기와이미지에서 Bitmap 객체생성 Bitmap(Image, Int, Int) Bitmap(Int, Int, Graphics) 지정된 Graphics 객체의해상도와지정된크기를사용하여 Bitmap 객체생성 Bitmap(Int,Int,PixelFormat) 지정된크기와형식을사용하여 Bitmap 객체

Bitmap Bitmap 클래스의주요메소드 메소드 FromFile FromHbitmap FromHicon FromResource FromStream Clone Save 파일로부터 Image 생성윈도우핸들에서 Bitmap 생성윈도우핸들에서아이콘까지 Bitmap 생성지정된윈도우리소스에서 Bitmap 생성지정된데이터스트림에서 Image 생성지정된 PixelFormat과함께정의된해당 Bitmap 부분의복사본생성이미지를디스크의파일로저장 Font Font 객체를사용하여출력할글자의글꼴과글자크기를결정할때사용 Font 생성자 생성자 Font(string, float) 폰트이름과크기를지정하여 Font 객체생성 Font(Font, FontStyle) 폰트와스타일을지정하여 Font 객체생성 FontStyle 열거형 FontStyle 열거형 Bold Italic Regular StrikeOut Underline 속성굵은체텍스트이탤릭체텍스트일반텍스트중간에줄이간텍스트밑줄이그어진텍스트 Graphics Graphics 클래스는각종그리기메소드를디스플레이장치에제공 Pen 객체를생성한후, Graphics 클래스에서제공하는메소드 ( 즉, DrawLine, DrawRectangle 등 ) 를이용하여선, 곡선, 도형을그림 Brush 객체를생성한후, Graphics 클래스에서제공하는메소드 ( 즉, FillRectangle, FillEllipse 등 ) 을이용하여도형내부를채움 Image 객체를생성한후, Graphics 클래스에서제공하는메소드 ( 즉, DrawImage 등 ) 을이용하여이미지를그림 Graphics Graphics 메소드 DrawArc Point, Size, Rectangle 로지정된타원의호 DrawBezier 네개의 Point로정의된 3차원 Spline 곡선 DrawBeziers Point 배열로정의된일련의 3 차원 Splines 곡선들 DrawClosedCurve Point 배열로정의된 Cardinal Spline 곡선 DrawCurve Point 배열을따라 Cardinal Spline 곡선 DrawEllipse Point, Size, 높이의쌍으로지정된타원 DrawLine Point 쌍에의해지정된두개의점을연결하는선 DrawLines Point 배열로정의된선분들 DrawPath GraphicsPath를그림 DrawPie Point, Size, 높이, 두개의방사형선으로지정된타원 DrawPolygon Point 배열에의해정의된다각형 DrawRectangle Point, Size, Rectangle로지정된사각형 DrawRectangles Rectangle로지정된일련의사각형들

Graphics Graphics 메소드 DrawString 지정된위치에지정된 Brush와 Font로지정된텍스트 문자열을그림 DrawIcon 지정된 Icon 에의해나타나는이미지를지정된 Point 에그림 DrawImage 지정된 Image 를지정된위치에원래크기로그림 FromImage 지정된 Image에서새 Graphics 객체생성 FromHdc 지정된 DC에대한새 Graphics 객체생성 FromHwnd 지정된 Window 핸들에서새 Graphics을생성 Graphics Graphics 메소드 FillEllipse FillPath FillPie FillPolygon FillRectangle FillRectangles FillRegion TranslateTransform RotateTransform ScaleTransform MultiplyTransform 타원형의내부를채움 Path의내부를채움 Pie 일부의내부를채움 Point 배열에의해정의된다각형의내부를채움 Point, Size, 높이의쌍으로지정된경계사각형에의해정의되는사각형의내부를채움사각형들의내부를채움 Region의내부를채움지정된위치만큼기하학적인변환을수행지정된각도만큼기하학적인변환을수행지정된크기만큼기하학적인변환을수행지정된행렬을곱함 System.Drawing.Design Design System.Drawing.Design 네임스페이스 미리지정된 Editor 클래스또는 ToolBox 클래스 System.Drawing.Drawing2D Drawing2D System.Drawing.Drawing2D 네임스페이스 벡터그래픽그리기관련클래스 클래스 BitmapEditor ColorEditor CursorEditor FontEditor IconEditor ImageEditor ToolBoxItem ToolBoxItemCollection 속성브라우저에서비트맵파일을선택할수있는 UI 제공색을시각적으로선택할수있는편집기제공커서파일 (.cur) 에대한기본파일검색을수행할수있는편집기제공폰트개체를선택하고구성하기위한 UI 제공아이콘을시각적으로선택할수있는편집기제공속성에대한이미지를선택할수있는 UI 제공기본구현된도구상자항목제공도구상자항목의컬랙션 주요클래스 Blend ColorBlend Gradient 브러시를위한블렌딩 GraphicsPath 연결된선이나곡선의집합을표현 HatchBrush Hatch 스타일브러시 LinearGradientBrush Linear gradient 의기능을가진브러시 Matrix 기하변환을위한 3x3 행렬

System.Drawing.Drawing2D Drawing2D System.Drawing.Drawing2D 네임스페이스 벡터그래픽그리기관련클래스 주요열거형 CombineMode 클리핑타입 CompositionQuality 합성방법 DashStyle 펜으로그리는 dash line 스타일 HatchStyle HatchBrush를위한패턴 LineCap 펜의캡스타일 WrapMode 채워질영역보다텍스쳐나그라데이션이작은경 우바둑판모양으로배열하는방법을지정 MatrixOrder 행렬변환작업의순서를지정 QualityMode GDI+ 객체의 quality SmoothingMode GDI+ 객체의 smoothing quality System.Drawing.Imaging System.Drawing.Imaging 네임스페이스 고급이미징기능제공 메타파일이미지를위한클래스, 또는 encoder and decoder 주요클래스 BitmapData 비트맵이미지의특성을지정 Encoder 이밎인코더매개변수의범주를식별하는 GUID(Globally Unique Identifier) 를캡슐화 ImageAttributes 렌더링하는동안비트맵과메타파일색을조작하는기능을제공 ( 색조정, 회색조조정, 감마보정, 색매핑테이블및임계값을포함한일부색조정설정을관리 ) Metafile 그래픽메타파일을정의 ( 메타파일에는생성및재생할수있는그래픽작업시퀀스를하는레코드 ) System.Drawing.Printing System.Drawing.Printing 네임스페이스 프린팅기능과관련된클래스제공 System.Drawing.Text System.Drawing.Text 네임스페이스 고급 GDI+ 입력체계기능을제공 주요클래스 PageSettings PaperSize PreviewPageInfo PrintController PrintDocument PrinterResolution PrinterSettings 페이지셋팅종이크기한페이지를위한미리보기문서출력제어출력을프린터로보냄프린터의 resolution 지정프린터셋팅 주요클래스 FontCollection InstalledFontCollection PrivateFontCollection 설치된글꼴컬랙션과전용글꼴컬랙션의기본클래스시스템에설치된글꼴클라이언트응용프로그램에서제공하는글꼴파일로부터만들어진글꼴패밀리의컬랙션을제공

폼에그리기 폼에는 GDI+ 를이용하여그리기를수행 폼에서그리기를수행하기위해서 Form 클래스의 OnPaint() 메소드를재정의하여사용 OnPaint() 메소드 Paint 이벤트가발생할때수행 Paint 이벤트처리기보다높은우선순위 Paint 이벤트발생 폼을화면에처음표시할때 폼이최소화되었다가최대화버튼을클릭할때 폼의크기를조정할때 폼이다른윈도우로가려졌다가전면에나타날때 프로그램에서 Invalidate() 메소드를호출할때 Invalid Region ( 무효영역 ) 메모장이그림판의일부를가리고있다가가려진부분이드러나는경우 ( 두가지방법이존재 ) 운영체제가가려진부분을메모리에임시저장해두었다가다시화면을복구 운영체제가화면복구를직접담당하는것 화면에다시그려야할부분을프로그램에알려주면프로그램이알아서다시그림 화면복구를각응용프로그램이담당하고운영체제는복구해야할시점과복구할영역정보전달하는것 50 OnPaint() OnPaint() 메소드 폼이나컨트롤은 Paint 이벤트가발생했을시, OnPaint() 메소드가수행하게되어있고, 이메소드안에서 Paint 이벤트핸들러를수행시키게되어있음 그리는대상이파생클래스이면 OnPaint() 메소드를재정의해서구현하는것이좋음 protected override void OnPaint(PaintEventArgs e) { Graphics g = e.graphics; // 그래픽객체참조 //Form1 의 OnPaint 재정의 그리는대상이.NET에서제공하는클래스 ( 예 : 컨트롤 ) 이면 Paint 이벤트핸들러를작성해서사용 private void picturebox1_paint(object sender, PaintEventArgs e){ Graphics g = e.graphics; // 그래픽객체참조 // picturebox1 컨트롤의 Paint 이벤트핸들러작성 OnPaint() 다른메소드에서폼에그림을그려야할경우 현재폼에서사용하는 Graphics 객체를사용해야함 Form 클래스의 CreateGraphics() 메소드는폼에서사용하는 Graphics 객체를반환 private void Form1_MouseClick(object sender, MouseEventArgs p _ ( j g e) { Graphics g = this.creategraphics(); // this 는폼의객체참조 P P (C l R d) Pen p = new Pen(Color.Red); g.drawelilipse(p, 8, 98, 4, 4); p.dispose(); g.dispose(); // Form1 의마우스클릭이벤트핸들러작성

OnPaint() 프로그램에서원하는시점에화면출력을하고자할경우 OnPaint() 메소드를직접호출하는대신 Invalidate() 메소드를이용 Invalidate() 메소드는특정폼 ( 또는컨트롤 ) 영역을무효화하고그리기이벤트메시지를폼 ( 또는컨트롤 ) 로보냄 Invalidate() 메소드는무효화영역 ( 다시그려야할필요가있는영역 ) 을인수로주는데, 만약없으면클라이언트창전체영역을의미 만약원하는시점에즉시화면에출력하고자한다면, Invalidate() 메소드를사용하여무효화영역을지정하고난후, Control 클래스의 Update() 메소드를호출 보류중인그리기요청실행 컨트롤이자신과모든자식을강제로다시그리도록하는 Refresh() 메소드를호출하면, Invalidate(true) 를호출한후 Upate() 메소드를호출한것과같은효과 Double Buffering 폼이나컨트롤에움직이는애니메이션을출력할경우화면의깜빡임 (flickering) 을방지하기위하여, C# 에서내부적으로제공해주는더블버퍼링을사용 public Form1() { InitializeComponent(); SetStyle(ControlStyles.DoubleBuffer, true); // 더블버퍼링 SetStyle(ControlStyles.AllPaintingWmPaint, true); y ( y g, ); SetStyle(ControlStyles.UserPaint, true);