블로그 이미지
내게 능력 주시는 자 안에서 내가 모든것을 할수 있느니라 - 빌립보서 4 : 13 - drum-83

카테고리

분류 전체보기 (145)
프로그래밍 (82)
서사대 (9)
MUSIC (8)
Utility (0)
세미나 소식 (17)
IT뉴스 (8)
Life (21)
Total64,895
Today67
Yesterday79

'프로그래밍/C#고급'에 해당되는 글 6건

  1. 2007/12/19 [C# 고급] GDI+ 이미지 다루기
  2. 2007/12/14 [C#고급] GDI+ 모양 그리기
  3. 2007/12/13 [C# 고급] GDI+ 선
  4. 2007/11/27 [C# 고급] GDI+ 브러시 (1)
  5. 2007/11/27 [C# 고급] GDI+ 펜
  6. 2007/11/26 [C# 고급] GDI+ 개요 및 특징

 GDI+ 이미지 다루기

 

 GDI+을 이용해서 이미지를 만들기도 하지만, 기존의 이미지 파일을 불러다가 그릴 수도 있고, 가공

할 수도 있다.

 

 Image 클래스는 픽셀 단위를 표현하기 위한 정보를 다루는 많은 메서드와 속성들을 정의하고 있다.

Width, Height, Size 속성은 이미지의 치수정보를 얻을 수 있으며, 팔레트를 다룰 수 있는 속성도 지원

하고 있다.

 System.Drawing.Imaging 네임스페이스는 이미지를 변형시키는데 도와주는 많은 클래스들을 정의

하고 있다.

 

저장된 파일을 이미지를 불러와 그리려면 Graphics객체의 DrawImage 메소드를 이용하면 된다.

DrawImage 메소드는 여러 개의 오버로드를 지원한다아래는 몇가지 오버로드를 확인 한 것이다.

 

//////////////////////////////////////////////////////////////////////////////////////////

# 이미지를 불러서 원본의 크기대로 지정한 좌표로 그려주는 형식

 

DrawImage(Image image, int x, int y);

 

 - image : 그리고자 하는 Image 객체

 - x : 그리려는 이미지의 왼쪽 위 모서리 X 좌표

 - y : 그리려는 이미지의 왼쪽 위 모서리 Y 좌표

 

//////////////////////////////////////////////////////////////////////////////////////////

# 지정한 좌표에 지정한 크기로 그려주는 형식

 

DrawImage(Image image, int x, int y, int width, int height);

 

- image : 그리고자 하는 Image 객체

- x : 그려지는 이미지의 왼쪽 위 모서리의 X 좌표

- y : 그려지는 이미지의 왼쪽 위 모서리의 Y 좌표

- Width : 그려지는 이미지 너비

- Height : 그려지는 이미지의 높이

 

//////////////////////////////////////////////////////////////////////////////////////////

# 지정된 Image 객체의 일정 부분을 설정한 크기로 그려주는 형식

 

DrawImage(Image image, Rectangle destRect, Rectagle srcRect, GraphicsUnit srcUint);

 

- image : 그리고자 하는 Image 객체

- destRect : 그려지는 이미지의 위치와 크기를 지정하는 Rectangle 구조체

  (이미지는 사각형에 맞추기 위해 크기가 조정되므로 주의하여야 함.)

- srcRect : 그릴 image 객체의 부분을 지정하는 Rectangle 구조체

- srcUnit : srcRect 매개 변수가 사용하는 측정 단위를 지정, GraphicsUnit 열거형 멤버

 

//////////////////////////////////////////////////////////////////////////////////////////

 

다음은 간단한 예제 이다.

 

 VS2005WinForm 프로젝트를 만든다. 그리고 나서 Paint 이벤트를 더블 클릭해서 이벤트를 생성

한다. (Paint 이벤트 : 컨트롤을 다시 그려야 할 때 발생합니다.) 그리고 아래 코드를 작성한다.

 

//////////////////////////////////////////////////////////////////////////////////////////

private void Form1_Paint(object sender, PaintEventArgs e)

{

// img01.jpg 파일로부터Bitmap 객체를생성한다.

Bitmap _imgbitmap = new Bitmap("img01.jpg");

// Graphics 객체를생성

Graphics _graphics = this.CreateGraphics();

//좌표, 10 에서시작하여생성된Bitmap 객체를그린다.

_graphics.DrawImage(_imgbitmap, 10, 10);

}

//////////////////////////////////////////////////////////////////////////////////////////

참고로 img01.jpg 파일을 프로젝트 생성한 bin폴더안에 Debug폴더안에 위치되어 있다.

아래 그림은 프로젝트 실행모습이다.

 

1. 그림

 

사용자 삽입 이미지

 

Paint 이벤트 이해

 

Paint 이벤트는 컨트롤을 다시 그리면 발생하는 이벤트 이다. 다시 그려진다는 의미는 프로그램에 의

해 가려 줬다가 다시 보일때, 프로그램 우측 상단에 보면 최소화, 최대화 버튼으로 인해 프로그램이

숨겨졌다가 다시 활성화 될 때 일어나는 이벤트 이다.

 

 아래는 실행 화면은 버튼을 생성하고 버튼의 Click 이벤트 부분에 위에서 작성한 코드를 넣고, Paint

이벤트 부분의 코드를 주석처리로 했다. 그럼 버튼을 클릭하면 이미지가 그려질 것 이다.

 

2. 그림 (실행 화면)

 

사용자 삽입 이미지

 

3.그림(버튼 클리으로 이미지 그림)

 

사용자 삽입 이미지

 

4. 그림(이미지 그린후 메모장 실행 이미지 겹친모습)

 

사용자 삽입 이미지

 

5.그림( 겹쳐진 메모장을 이동한 모습)

 

사용자 삽입 이미지

 

위에서 말했듯이 최대화 ,최소화 버튼을 클릭했을 때도 이미지가 사라지는 모습을 볼 수 있을 것이다.

한번 만들어 보고 실험해 보길 바란다.

 

 

 

- 참고 서적 : C# 게임 프로그래밍 -

 

Posted by happydong drum-83

ㅁ GDI+ 모양 그리기


선은 Graphics 객체에서 Draw로 시작하는 메소드를 통해 그릴수 있고, Graphics 객체의 메소드들 을 보면 Fill로 시작하는 메소드들은 도형을 그리고 그 도형 안에 색을 채워 주는 메소드로 Brush 객체를 매개변수로 사용 한다.

※ Graphics 클래스의 모양 그리기(채우기) 메소드

 메소드

 설명

 FillClosedCurve  Point 구조체의 배열에 의해 정의된 닫힌 카디널 스플라인의 내부를 채운다.
 FillEllipse  좌표, 너비, 높이의 쌍으로 지정된 경계 사각형에 의해 정의되는 타원의 내부를 채운다.
 FillPath  GraphicsPath 개체의 내부를 채운다.
 FillPie  좌표 쌍, 너비, 높이, 및 두 개의 방사형 선에 의해 지정된 타원에 의해 정의되는 부채꼴 섹션의 내부를 채운다.
 FillPolygon  Point 구조체에 의해 지정된 점의 배열에 의해 정의되는 다각형의 내부를 채운다.
 FillRectangle  좌표 쌍, 너비 및 높이로 지정된 사각형의 내부에 의해 정의되는 사각형의 내부를 채운다.
 FillRectangles  Rectangle 구조체에 의해 지정된 일련의 사각형의 내부를 채운다.
 FillRegion  Region 개체의 내부를 채운다.

아래 참고 예제는 WinForm 프로젝트로 확인한 예제이다.

1.그림

사용자 삽입 이미지


위 그림은 Form 위에 Button 컨트롤 6개를 올려둔 모습이며, 이 예제에서는 각각의 버튼을
클릭하면 원하는 도형이 그려지도록 하는 예제이다.
아래는 코드는 각각의 Button 이벤트에서 일어나는 행위들을 정의한 것이다.

//////////////////////////////////////////////////////////////////////////////////////////

// 추가

using System.Drawing.Drawing2D;

 

// 사각형그리기버튼이벤트

private void btn_Rectangle_Click(object sender, EventArgs e)

{

            // Graphics 객체를생성한다.

            Graphics _graphics = this.CreateGraphics();

            // 메인폼의Graphics 객체를통해바탕화면을희색으로Clear한다.

            _graphics.Clear(Color.White);

 

            // 검은색Pen 객체를생성한다.

            Pen _pen = new Pen(Color.Black);

            // 검은색펜을통해사각형선을그린다.

            _graphics.DrawRectangle(_pen, 10, 10, 320, 165);

 

            // 노란색SolidBrush 객체를생성한다.

            SolidBrush _brush = new SolidBrush(Color.Yellow);

            // 노란색으로채워진사각형을그린다.

            _graphics.FillRectangle(_brush, 10, 180, 320, 165);

}

 

// 원그리기버튼이벤트

private void btn_Ellipse_Click(object sender, EventArgs e)

{

            // Graphics 객체를생성후폼을희색으로Clear 한다.

            Graphics _graphics = this.CreateGraphics();

            _graphics.Clear(Color.White);

 

            // 검은색Pen 객체생성

            Pen _pen = new Pen(Color.Black);

            // 검은색펜으로원선을그린다.

            _graphics.DrawEllipse(_pen, 10, 10, 320, 165);

 

            //토마토색SolidBrush 객체를생성후원안의색을채운다.

            SolidBrush _brush = new SolidBrush(Color.Tomato);

            _graphics.FillEllipse(_brush, 10, 180, 320, 165);

}

 

// 삼각형그리기버튼이벤트

private void btn_Polygon_Click(object sender, EventArgs e)

{

            // Graphics 객체를생성후폼을희색으로Clear 한다.

            Graphics _graphics = this.CreateGraphics();

            _graphics.Clear(Color.White);

 

            // 검은색Pen 객체생성

            Pen _pen = new Pen(Color.Black);

            //삼각형을그리기위한포인트배열을생성한다.

            Point[] _point01 = new Point[]{

                new Point(175,10), new Point(10,165), new Point(340,165)

};

            //검은색펜으로다각형선을그린다.

            _graphics.DrawPolygon(_pen, _point01);

 

            // 은색SolidBrush 객체를생성후다각형안을채운다.

            SolidBrush _brush = new SolidBrush(Color.Silver);

            Point[] _point02 = new Point[]{

                new Point(10,175), new Point(175,340), new Point(340,175)

            };

            _graphics.FillPolygon(_brush, _point02);

}

 

// Hatch Style 버튼이벤트

private void btn_Hatch_Click(object sender, EventArgs e)

{

            // Graphics 객체를생성후폼을희색으로Clear 한다.

            Graphics _graphics = this.CreateGraphics();

            _graphics.Clear(Color.White);

 

            // Hatch Style을그리기위해offSet 정수형변수를생성한다.

            int offSet = 10;

            // HatchStyle 타입의열거형값들을받아Array Object 객체를생성한다.

            // HatchStyle 타입의열거형생성하려면using문추가System.Drawing.Drawing2D;

            Array obj = Enum.GetValues(typeof(HatchStyle));

            // HatchStyle 열거형값이많아10개의값만출력할수있도록반복문생성한다.

            for (int i = 0; i <= 10; i++)

            {

                // i번째HatchStyle 열거형값의HatchStyle 객체를생성한다.

                HatchStyle h_Style = (HatchStyle)obj.GetValue(i);

                /* 생성된Hatchstyle 객체를통해HatchBrush 객체

                 희색전경색에검은색배경색으로생성한다. */

                HatchBrush H_brush = new HatchBrush(h_Style, Color.White, Color.Black);

                // HatchStyle 객체의값이름을DrawString 메소드를통해그린다.

                _graphics.DrawString(h_Style.ToString(), new Font("굴림체", 10), new SolidBrush(Color.Black), 0, offSet);

                // 생성된HatchBrush 객체의브러시를통해채워진사각형을그린다.

                _graphics.FillRectangle(H_brush, 140, offSet, 200, 20);

                // 다음객체를그리기위해좌표를offSet 변수를통해재설정한다.

                offSet += 30;

            }

}

 

// Texture 버튼이벤트

private void btn_Texture_Click(object sender, EventArgs e)

{

            /* bgimage.bmp파일과txtimage.bmp 파일을해당프로젝트에

             bin폴더안에Debug폴더안에넣어두었다.*/

 

            // 백그라운드이미지객체를생성한다.

            Image _bgimg = new Bitmap("bgimage.bmp");

            // 생성한이미지객체를통해TextureBrush 객체를생성한다.

            TextureBrush txtbgbrush = new TextureBrush(_bgimg);

 

            // 텍스트이미지객체를생성한다.

            Image txtimg = new Bitmap("txtimage.bmp");

            // 생성한이미지객체를통해TextureBrush 객체를생성한다.

            TextureBrush txtbrush = new TextureBrush(txtimg);

 

            // Graphics 객체를생성후폼을희색으로Clear 한다.

            Graphics _graphics = this.CreateGraphics();

            _graphics.Clear(Color.White);

 

            /* 백그라운드이미지를통해생성된TextureBrush 객체를통해

             현재폼을이미지로채운다.*/

            _graphics.FillRectangle(txtbgbrush, this.ClientRectangle);

            // 텍스트에이미지를입혀서그린다.

            _graphics.DrawString("Texture Brush~!", new Font("굴림체", 60, FontStyle.Bold | FontStyle.Italic), txtbrush, this.ClientRectangle);

}

 

// Gradient 버튼이벤트

private void btn_Gradient_Click(object sender, EventArgs e)

{

            // Graphics 객체를생성후폼을희색으로Clear 한다.

            Graphics _graphics = this.CreateGraphics();

            _graphics.Clear(Color.White);

 

            int offSet = 10;

            /* 그라데이션브러시를생성하기위해비워있는

              LinearGradientBrush 객체를생성한다. */

            LinearGradientBrush Lbrush = null;

            Rectangle _rectangle = new Rectangle(0, 0, 100, 100);

            // LinearGradientMode 타입의열거형값을Array 객체로생성한다.

            Array obj = Enum.GetValues(typeof(LinearGradientMode));

 

            // LinearGradientMode 타입의열거형값을출력하기위해반복문생성한다.

            for (int i = 0; i < obj.Length; i++)

            {

                // i 번째LinearGradientMode 객체의열거형값객체를생성한다.

                LinearGradientMode lgMode = (LinearGradientMode)obj.GetValue(i);

                /* 생성된LinearGradientMode 객체를통해LinearGradientBrush 객체를

                   빨강색과파랑색을혼합하여생성한다. */

                Lbrush = new LinearGradientBrush(_rectangle, Color.Red, Color.Blue, lgMode);

                // LinearGradientMode 객체의열거형값이름을그린다.

                _graphics.DrawString(lgMode.ToString(), new Font("굴림체", 10), new SolidBrush(Color.Black), 0, offSet);

                // 생성된LinearGradientBrush 객체의브러시를통해채워진사각형그린다.

                _graphics.FillRectangle(Lbrush, 140, offSet, 200, 50);

                // 다음객체를그리기위해좌표를offSet 변수를통해재설정한다.

                offSet += 80;

            }

}

//////////////////////////////////////////////////////////////////////////////////////////


아래 그림은 결과 화면이다.


2. 그림 (사각형)

사용자 삽입 이미지


3.그림(원)

사용자 삽입 이미지


4.그림 (삼각형)

사용자 삽입 이미지


5.그림 (Hatch Style)

사용자 삽입 이미지


6.그림(Texture)

사용자 삽입 이미지


7.그림(Gradient)

사용자 삽입 이미지




- 참고 서적 : C# 게임 프로그래밍 -





Posted by happydong drum-83

ㅁ  GDI+ 선 다루기


 - Graphics클래스에 정의된 렌더링 메소드들의 매개변수로 Pan객체를 넘겨 줌으로써 원하는 선을 그릴 수 있다. (Graphics는 다양한 선을 그리는데 사용하는 메소드를 지원 한다.)

※ Graphics 클래스의 선 그리기 메소드

 메소드

 설명

 DrawArc  좌표, 너비, 높이의 쌍으로 지정된 타원의 부분을 나타내를 호를 그린다.
 DrawBezier  Point 구조체 네 개로 정의되는 Bezier 스플라인을 그린다.
 DrawDeziers  일련의 Bezier 스플라인을 Point 구조체의 배열에서 그린다.
 DrawClosedCurve  Point 구조체의 배열에 의해 정의되는 닫힌 카디널 스플라인을 그린다.
 DrawCurve  Point 구조체의 지정된 배열을 따라 카디널 스플라인을 그린다.
 DrawEllipse  좌표, 높이, 너비의 쌍으로 지정된 경계 사각형에 의해 정의되는 타원을 그린다.
 DrawLine  좌표 쌍에 의해 지정된 두 개의 점을 연결하는 선을 그린다.
 DrawLines  Point 구조체의 배열을 연결하는 일련의 선 세그먼트를 그린다.
 DrawPath  System.Drawing.Drawing2D 네임스페이스에 정의된 GraphicsPath 객체를 이용해서 경로가 정해진 선/곡선의 집합을 그린다.
 DrawPie  좌표 쌍, 너비, 높이 및 두 개의 방사형 선에 의해 지정된 타원으로 정의된 부채꼴 모양을 그린다.
 DrawPolygon  Point 구조체의 배열에 의해 정의된 다각형을 그린다.
 DrawRectangle  좌표 쌍, 너비 및 높이에 의해 지정된 사각형을 그린다.
 DrawRectangles  Rectangle 구조체에 의해 지정된 일련의 사각형을 그린다.
 DrawString  지정된 위치에 지정된 Brush 및 Font 개체로 지정된 텍스트 문자열을 그린다.

아래 코드는 WinForm프로젝트로 알아본 예제 코드 입니다.

///////////////////////////////////////////////////////////////////////////////////////

//이벤트선택: paint 이벤트는컨트롤을다시그려야할때발생하는이벤트이다.

private void Form1_Paint(object sender, PaintEventArgs e)

{

            //Graphics 객체통해서화면에그래픽이미지작업을처리

            Graphics graphics = e.Graphics;

 

            //굵기, 파생색펜을생성

            Pen pen = new Pen(Color.Blue, 10);

 

            //Pens으로부터지정된Pen 객체를얻는다.

            Pen pens = Pens.Firebrick;

           

            //다양한펜을이용해여러형태의선을그린다.

            //1. 원그리기

            graphics.DrawEllipse(pen, 10, 10, 100, 100);

            //2. 선그리기

            graphics.DrawLine(pens, 10, 150, 110, 150);

            //3. 부채꼴그리기

            graphics.DrawPie(Pens.Black, 120, 10, 120, 150, 90, 80);

 

            //4. 보라색대쉬선을이용한도형만들기

            Pen pPen = new Pen(Color.Purple, 5);

            //DashStyle사용하려면using 추가System.Drawing.Drawing2D

            pPen.DashStyle = DashStyle.DashDotDot;

            Point[] dotPoint = new Point[]{

                new Point(150,330),new Point(20,100),

                new Point(30,80), new Point(80,100),

                new Point(50,220)

            };

            graphics.DrawPolygon(pPen, dotPoint);

 

            //5. 사각형안에텍스트넣기

            Rectangle rectangle = new Rectangle(150, 10, 130, 60);

            graphics.DrawRectangle(Pens.Blue, rectangle);

            graphics.DrawString("오호그래픽~이렇게나오는구나~!", new Font("돋움체", 12), Brushes.Red, rectangle);

 

            //6. 폼의가장자리에커스텀DashPattern을이용해선을그리기

            Pen cDashPen = new Pen(Color.BlueViolet, 5);

            float[] cDashes = { 5.0f, 2.0f, 1.0f, 2.0f };

            //길이5인대시, 2인공백,길이1인대시, 2인공백

            cDashPen.DashPattern = cDashes;

            graphics.DrawRectangle(cDashPen, ClientRectangle);

}

//////////////////////////////////////////////////////////////////////////////////////////

위 코드중 DashStyle 속성을 설정하고 있는데..DashStyle열거형의 Dash 스타일은 다음 표와같다.

 열거형

 설명

 Custom  사용자 정의의 대쉬 스타일을 나타낸다
 Dash  짧은 선(dash)으로만 이루어진 파선을 나타낸다
 DashDot  짧은 선(dash)과 점(dot)으로 이루어진 일점 쇄선을 나타낸다.
 DashDotDot  짧은 선(dash) 사이에 점(dot)이 두 개가 들어가는 이점 쇄선을 나타낸다.
 Dot  점(dot)으로만 이루어진 점선을 나타낸다.
 Solid  중간에 공백이 없는 일반 직선을 나타낸다.

아래는 결과 화면이다.

사용자 삽입 이미지



 - 참고 서적 : C# 게임 프로그래밍 -


Posted by happydong drum-83
TAG GDI+, GDI+선

ㅁ GDI+ 브러시 다루기

 - 채워진 모양, 이미지 또는 텍스트 같은 그래픽의 영역을 채우는데 사용.

※ 브러시(Brush)의 종류

 클래스

 설명

 SolidBrush  가장 간단한 형식의 브러시로 단색으로 그림
 HatchBrush  SolidBrush와 비슷하지만 단색 대신 미리 설정된 다양한 패턴 중에서 선택하여 그릴 수있음
 TextureBrush  이미지와 같은 질감을 사용하여 그림
 LinearGradienBrush  그라데이션에 따라 혼합된 두 가지 색으로 그림
 PathGradienBrush  개발자가 정의한 고유한 경로에 따라 혼합된 색의 복합 그라데이션을 사용하여 그림

 ▶ SolidBrush

   ☞ SolidBrush는 단색의 기본적인 브러시로 특정 색깔을 이용해서 선 사이의 공간이 이미지 혹은 다양한 형태의 도형의 내부를 채울 때 사용한다.

///////// 예제 코드//////////////////////////////////////////////////////////////////////

Graphics graphics = this.CreateGraphics();

//this.CreateGraphics(): 해당컨트롤에대한Graphics를만든다.

SolidBrush sbrush = new SolidBrush(Color.Red);

graphics.FillRectangle(sbrush, 0, 0, 100, 100);

 

/*오버로드3번째인자값내용들

첫번째: 채우기의특징을결정하는브러시입니다

두번째: 채울사각형을나타내는Rectangle구조체입니다

세번째: 채울사각형의왼쪽위모퉁이에대한Y좌표입니다

네번째: 채울사각형의너비입니다

다섯번째: 채울사격형의높이입니다.*/

/////////////////////////////////////////////////////////////////////////////////////////

 ▶ HatchBrush

   ☞ System.Drawing.Drawing2D 네임스페이스 내에 포함되어 있는 HatchBrush는 HatchStyle 열거형에 있는 값 중 하나로 표현된 다양한 형태를 이용하여 특정 부분을 채울 때 사용한다.

 ※ 대표적인 Hatch 무늬값

 열거형 값

 설명 

 BackwardDiagonal 오른쪽 위에서 왼쪽 아래로 사선이 그어진 형태의 브러시
 Cross  수직선과 수평선의 겹친 바둑판 형태의 선이 그어진 브러시
 ForwardDiagonal   왼쪽 위에서 오른쪽 아래로 사선이 그어진 형태의 브러시
 Horizontal  수평선이 그어진 브러시
 Vertical  수직선이 그어진 브러시

///////// 예제 코드/////////////////////////////////////////////////////////////////////

using System.Drawing.Drawing2D;

Graphics graphics = this.CreateGraphics();

HatchBrush hbrush = new HatchBrush(HatchStyle.Cross, Color.Red, Color.Blue);

/* HatchBrush의 특징 중에 하나는 위와 같이 두개의 색을 쌍으로 사용하는 것이다.(앞의 것은 전경색,뒤에 것은 배경색으로 사용)

graphics.FillRectangle(hbrush, 0, 0, 100, 100);

/////////////////////////////////////////////////////////////////////////////////////////

 ▶ TextureBrush

   ☞ TextureBrush는 패턴으로 이미지를 사용한다. 비트맥 이미지에 브러시를 사용하여 채우기 (Fill) 작업을 할때 사용하는 것이다.

///////// 예제 코드/////////////////////////////////////////////////////////////////////

TextureBrush BGTextureBrush = new TextureBrush("bgimage.bmp");

TextureBrush TXTTextureBrush = new TextureBrush("txtimage.bmp");

Graphics g = this.CreateGraphics();

Rectangle r = new Rectangle(10, 10, 150, 150);

Font font = new Font("Arial", 60, FontStyle.Bold | FontStyle.Italic);

 

g.FillRectangle(BGTextureBrush, r);

g.DrawString("Hello world~", font, TXTTextureBrush, r);

/////////////////////////////////////////////////////////////////////////////////////////

 ▶ LinearGradientBrush

   ☞ 그라데이션 효과를 나타내기 위해 두가지 색을 부드럽게 혼합하여 모양을 채울때 LinearGradienBrush를 사용한다.

※ LinearGradientBrush 열거형

 열거형 값

 설명

 BackwardDiagonal   오른쪽 위에서 왼쪽 아래로 그라데이션 효과를 준다.
 ForwardDiagonal  왼쪽 위에서 오른쪽 아래로 그라데이션 효과를 준다.
 Horizontal  수평으로 그라데이션 효과를 준다.
 Vertical  수직으로 그라데이션 효과를 준다.


///////// 예제 코드/////////////////////////////////////////////////////////////////////

using System.Drawing.Drawing2D;

Graphics graphics = this.CreateGraphics();

LinearGradientBrush lgbrush = new LinearGradientBrush(ClientRectangle, Color.Red, Color.Yellow, LinearGradientMode.Vertical);

graphics.FillRectangle(lgbrush, 10, 10, 200, 200);

/////////////////////////////////////////////////////////////////////////////////////////

★ 그라데이션 ★--------------------------------------------------- 그라데이션이란 그래픽의 기법으로 한 색상에서 다른 색상으로 또는 어두운 데
에서 밝은 값으로, 거친 질감에서 매끈한 질감으로 등과 같이 점진적으로 변화하
는 것을 말한다.
-----------------------------------------------------------------

- 참고 서적 : C# 게임 프로그래밍 -

Posted by happydong drum-83

ㅁ 펜 다루기


 선을 그리거나 모양의 윤곽을 그리고 기타 기하학적 표시를 렌더링(Rendering)하는데 사용한다.

아래 코드는 펜 객체 사용예제이다.
////////////////////////////////////////////////////////////////////////////////

Pen pen = new Pen(Color.Black);

Pen pen = new Pen(Color.Black, 10);

////////////////////////////////////////////////////////////////////////////////

위 코드는 펜촉의 너비와 처음 색상을 정해주는 코드이다.

Pen의 대부분 기능은 지원하는 속성에 따라 다양한 설정이 가능하다. (아래표 참고)

 속성

 설명

 Alignment  Pen 개체의 맞춤을 가져오거나 설정한다(PenAlignment 열거형).
 Brush  Pen 개체의 특성을 결정하는 Brush 개체를 가져오거나 설정한다.
 Color  Pen 개체의 색을 가져오거나 설정한다.
 CompoundArray  복합 펜을 지정하는 배열 값을 가져오거나 설정한다. 복합 펜은 평행선과 공백으로 이루어진 복합 선을 그린다.
 CustomEndCap  Pen 개체를 사용하여 그리는 선의 끝에 사용할 사용자 정의 캡을 가져오거나 설정한다.
 CustomStartCap  Pen 개체를 사용하여 그리는 선의 시작에서 사용할 사용자 정의 캡을 가져오거나 설정한다.
 DashCap  Pen 개체를 사용하여 그리는 파선을 구성하는 대시의 끝에 사용되는 캡 스타일을 가져오거나 설정한다.
 DashOffset  선의 시작에서 대시 패턴의 시작까지의 거리를 가져오거나 설정한다.
 DashPattern  사용자 정의 대사와 공백의 배열을 가져오거나 설정한다.
 DashStyle  Pen 개체를 사용하여 그리는 파선에 사용될 스타일을 가져오거나 설정한다.
 LineJoin  Pen 개체를 사용하여 그리는 두 개의 연속선의 끝에 사용되는 결합 스타일을 가져오거나 설정한다.
 PenType  Pen 개체를 사용하여 그려지는 선의 스타일을 가져온다.
 StartCap  Pen 개체를 사용하여 그리는 선의 시작에 사용되는 캡 스타일을 가져오거나 설정한다.
 EndCap  Pen 개체를 사용하여 그리는 선의 끝에 사용되는 캡 스타일을 가져오거나 설정한다.
 Width  Pen 개체의 너비를 가져오거나 설정한다.


- 참고 서적 : C# 게임 프로그래밍 -

Posted by happydong drum-83
TAG GDI+, GDI+펜

ㅁ GDI+의 개요

 -  GDI+(Graphical Device Interface)는 그래픽 프로그래밍을 위한 닷넷 프레임워크 객체 지향적 클래스 라이브러리 이다.
 - GDI+ 는 서로 함께 작동하도록 고안된 여러 클래스들로 구성되어 있다.
 - Visual Studio .NET에서는 두개의 GDI+ 라이브러리가 존재한다.
   하나, .NET GDI+ 라이브러리로 닷넷 프레임워크의 일부로 제공되는 네임스페이스들과 클래스들의
    집합이다.
   둘 , MFC(Microsoft Foundation Class)에는 GDI를 캡슐화하는 여러 C++ 클래스들이 포함되어있
    는데 그것들의 이름도 GDI+ 이다.

GDI의 주요 특징

 - 창, 비트맵, 프린터라는 세 종류의 그리기 표면(Drawing Surface)들을 제공한다.

 - 임의의 그리기 표면에 2차원적 "선화(Line_Drawing)"를 그릴 수 있게 하는 도구들을 제공한다. GDI+에서는 다양한 브러시와 펜을 사용해서 여러 종류의 선, 도형, 다각형, 곡선을 그릴 수 있으며, 여러 가지 종류의 변환 기능들이 제공되므로 정교한 효과들을 손쉽게 구현할 수 있다.

 - 다양한 텍스트 그리기 기능을 제공한다. (기하학적 변형, 안티앨리어싱, 팔레트 혼합)

 - 이미지 및 비트맵을 지원한다. 이미지를 읽어서 임의의 그리기 표면에 그리는 것이 가능하며, 이미지를 생성하고 그 안에 다른 그림을 그리는 것도 가능하다.

 - 인쇄를 지원한다. 개발자는 특별한 노력 없이도 인쇄 미리보기 기능을 손쉽게 구현할 수 있다.

 - 닷넷 프레임워크에 완전히 통합되어 있다. 이는 어떠한 종류의 닷넷 응용 프로그램과도 호환될수 있도록 설계될어 있다는 것이다.

ㅁ GDI+ 네임스페이스

 Namespace

 설명

System.Drawing 이것은 막강한 능력을 지닌 Graphics 타입 뿐 아니라 다양한 기본 렌더링 형식을 정의한 GDI+ 핵심 네임스페이스이다.(그리기 표면, 이미지, 브러시, 펜, 폰트 등)
System.Drawing.Drawing2D 좀더 진보된 2차원 그래픽 기능에 사용되는 타입을 제공한다.(고급 래스터 및 벡터 그래픽 기능을 제공하여 gradient 브러시 기법과 기하학적 변형 작업이 가능함)
System.Drawing.Imaging 그래픽 이미지를 직접 다루는 타입을 제공한다.(팔레트 바꾸기, 이미지 메타 데이터 뽑아내기,메타 파일 다루기 등)
System.Drawing.Printing 출력된 페이지에 대한 이미지를 만들어 내고 프린터 자체와 상호 작용하거나 또는 주어진 출력 작업의 외형의 틀을 잡게 해주는 타입을 제공한다.
System.Drawing.Text 폰트 모음을 다르게 해준다. 예를 들어 FontCollection 타입은 동적으로 목표 컴퓨터에 설치된 폰트의 잡합을 찾게 해 준다.
System.Drawing.Design 사용자 지정 컨트롤의 디자인 시점 지원을 개선하기 위한 기능을 제공한다. Visual Studio .NET의 디자인 창 안에서 사용자 지정 컨트롤의 행동을 커스텀화하는데 쓰이는 커스텀 UITypeEditor클래스 개발을 위한 클래스들 포함되어 있다.

 위 표는 6개의 GDI+ 주요 네임스페이스 이다. 이중에서도 GDI+ 어플리케이션 프로그래밍을 작성할때 많이 사용되는 타입들은 System.Drawing 네임스페이스 내에 정의 되어 있다. (System.Drawing : 이미지, 브러시, 펜, 폰트를 표현하는 클래스 뿐만 아니라 Color,Point 그리고Rectangle과 같은 많은 연관된 타입들이 정의되어 있다.)

ㅁ System.Drawing 네임스페이즈의 주요 클래스 목록

 Class

 설명

 Bitmap  픽셀 데이터로 정의된 이미지를 사용하여 작업하는 데 사용된 개체, 그래픽 이미지의 픽셀 데이터와특성으로 구성되는 GDI+ 비트맵을 캡슐화
 Brush  사각형, 타원, 파이, 다각형 및 경로와 같은 그래픽 도형의 내부를 채우는데 사용된 개체
 Brushes  모든 표준 색에 사용되는 브러시
 BufferedGraphics  더블 버퍼링을 위한 그래픽 버퍼 지원
 BufferedGraphicsContext  더블 버퍼링을 사용할 수 있도록 그래픽 버퍼들의 생성 메소드들을 지원
 BufferedGraphicsManager  어플리케이션 도메인에 대한 그래픽스 컨텍스트 객체의 메인 버퍼 접근을 지원한다.
 ColorConverter  한 데이터 형식에서 다른 데이터 형식으로 색상을 변환
 ColorTranslator  색을 GDI+ Color 구조체로 변환하거나 구조체에서 변환
 Font  글꼴, 크기, 스타일 특성을 포함하여 텍스트의 특정 형식을 정의
 FontConverter  한 데이터 형식에서 다른 데이터 형식으로 Font개체를 변환
 FontFamily  비슷한 기본 디자인 및 스타일의 특정 변형이 있는 형식의 그룹을 정의
 Graphics  GDI+ 그리기 화면을 캡슐화
 Icon  Windows 아이콘을 나타내는데 사용
 IconConverter  개체를 한 데이터 형식에서 다른 것으로 변환
 Image  Bitmap, Icon 및 Metafile 하위 클래스에 기능을 제공하는 기본 클래스
 ImageAnimator  시간 기반 프레임을 가진 이미지에 애니메이션 효과를 줌
 ImageConverter  하나의 데이터 형식에서 다른 데이터 형식으로 Image 개체를 변환
 ImageFormatConvertor  하나의 데이터 형식에서 다른 데이터 형식으로 색상을 변환
 Pen  선과 곡선을 그리는데 사용되는 개체의 정의

 Pens  모든 표준 색에 사용되는 펜
 PointConverter  하나의 데이터 형식에서 다른 데이터 형식으로 Point 개체를 반환
 RectangleConverter  한 데이터 형식에서 다른 데이터 형식으로 사각형을 반환
 Region  사각형과 경로로 구성된 그래픽 모양의 내부를 설명
 SizeConverter  하나의 데이터 형식에서 다른 데이터 형식으로 변환하는데 사용
 SolidBrush  단일 색의 브러시를 정의
 StringFormat  맞춤 및 줄 간격과 같은 텍스트 레이아웃 정보를 캡슐화하고, 줄임표(...) 삽입과 국가별 숫자 대체와 같은 조작 및 OpenType 기능을 표시
 SystemBrushes  각 속성은 Windows 표시 요소의 색인 SolidBrush 개체
 SystemColors  각 속성은 Windows 표시 요소의 색인 Color 구조체
 SystemIcons  각 속성은 Windows 시스템 아이콘의 Icon 개체
 SystemPens  각 속성은 Windows 표시 요소의 색이며 너비가 1인 Pen 개체
 TextureBrush  각 속성은 이미지를 사용하여 도형 내부를 채우는 Brush 개체
 ToolboxBitmapAttribute  지정된 구성 요소와 관련된 이미지를 정의

Graphics객체는 Windows 폼에 위해 생성할 수 있으며, 이미지 클래스에서 파생된 객체를 통해서도 생성 할 수 있다. Graphics 객체와 함께 사용될 주요 객체는  Pen Class, Brush Class, Font Class, Color Struct 등이 있다.

안티앨리어싱 ★----------------------------------------------------------------------
앨리어싱으로 인해 거칠어진 이미지나 사운드를 다듬어 주는 기법이다. 앨리어싱은 가장자리가 톱니 모양처럼 들쭉날쭉하게 되는 계단 효과가 나타나는 것을 말하는데, 이러한 것들을 없애기 위한 것이 바로 안티앨리어싱 기법이다. 이미지에서 앨리어싱을 제거하기 위한 방법으로는 보통 픽셀의 위치나 명암을 조정하여 설정하는 방법이 있는 데, 이렇게 하면 선의 색상과 배경의 색상 사이에 좀 더 점진적인 변화가 생기도록 조종하므로 애리어싱을 제거할 수 있다.
----------------------------------------------------------------------------------------

 - 참고 서적 : C# 게임 프로그래밍 -

Posted by happydong drum-83