상세 컨텐츠

본문 제목

C# Graphics 클래스를 사용하여 그리기 (기초)

프로그래밍/C#

by TickTack 2021. 2. 17. 17:55

본문

이번에는 .Net에서 기본으로 제공하는 Graphics 클래스를 사용하여 그림을 그려보도록 하겠습니다.

네임스페이스까지 포함하면 System.Drawing.Graphics 입니다.

먼저 빈 프로젝트를 만든 후 폼의 Paint 이벤트를 만들어줍니다.

 

 

Form Load 이벤트에 this.CreateGraphics를 적용하니 그려지지 않아서 이와 같은 방법으로 설정하였습니다.

이제 그림을 그려보겠습니다. 먼저 아래와 같은 코드가 나오도록 해줍니다.

Draw 함수를 아직 만들지 않았기때문에 오류가 발생할 것입니다.

 

private void Form1_Paint(object sender, PaintEventArgs e)
{
    Graphics graphic = e.Graphics;
    Draw(graphic);
}

 

Graphics 객체는 Form Paint 이벤트에서 발생한 Graphics로 설정합니다.

폼에 그릴 때 사용하는 Graphics 라고 생각하시면 됩니다.

 

이제 Draw 함수를 만들어줍니다. 이벤트에다 직접 코드를 넣어도 되지만 이렇게 사용하면

폼에다 그리는 Graphics, 이미지에다 그리는 Graphics 등

다양한 Graphics 객체에 적용하기 쉽기 때문에 따로 분리한 것입니다.

 

private void Draw(Graphics graphic)
{
    Pen pen = new Pen(Color.Black);
    Pen pen2 = new Pen(Color.FromArgb(255, 0, 196));
    Rectangle rec = new Rectangle(100, 100, 50, 50);
    Rectangle rec2 = new Rectangle(200, 200, 50, 50);
    Font font = new Font("맑은 고딕", 12);

    graphic.DrawLine(pen, new Point(0, 0), new Point(100, 100));
    graphic.DrawRectangle(pen, rec);
    graphic.DrawEllipse(pen, rec);
            
    graphic.DrawLine(pen2, new Point(200, 200), new Point(300, 300));
    graphic.DrawRectangle(pen2, rec2);
    graphic.DrawEllipse(pen2, rec2);

    graphic.DrawString("Test", font, Brushes.Magenta, new PointF(160, 160));
}

 

Graphics 객체를 받아서 처리하는 Draw 함수입니다.

두 종류의 펜, 두 종류의 사각형, 폰트를 생성한 후 선, 사각형, 원, 문자열을 그리는 코드입니다.

Draw와 연관된 것들의 종류가 다양하지만 자주 사용하는 것 위주로 추렸습니다.

아래는 코드 결과입니다.

 

 

코드 설명을 보고 싶으시면 접힌 글을 확인해주세요.

 

더보기

* Pen

먼저 그릴 때 사용하는 펜을 각각 다른 색상으로 2개 만들었습니다.

색상 선언시에 사용한 FromArgb는 RGB 값으로 색상을 정하는 방법입니다.

색상은 기본적으로 #FFFFFFFF의 형태로 되어있습니다. 해당 값은 하얀색이며 각각 16진수 형태입니다.

설명에는 #FF123456을 예시로 들겠습니다.

 

- FF : 투명도 값입니다. FF(255)는 가장 진함, 0은 보이지 않습니다.

- 12 : Red 수치입니다. FF는 진한 빨강, 0으로 갈 수록 빨강색이 옅어집니다.

- 34 : Green 수치입니다. FF는 진한 녹색, 0으로 갈 수록 녹색이 옅어집니다.

- 56 : Blue 수치입니다. FF는 진한 파랑, 0으로 갈 수록 파랑색이 옅어집니다.

 

* Rectangle

rec : 폼의 좌표 x = 100, y = 100를 사각형 왼쪽 상단 꼭지점으로 잡고 가로 50, 세로 50의 크기로 그립니다

rec2 : 폼의 좌표 x = 200, y = 200를 사각형 왼쪽 상단 꼭지점으로 잡고 가로 50, 세로 50의 크기로 그립니다

 

* Font

맑은 고딕 폰트이며, 크기가 12pt인 폰트 객체를 생성합니다.

 

* DrawLine

선을 그리는 함수입니다.

위에 선언한 검은색 펜을 사용해서 폼 좌표 (0, 0)에서 부터 (100, 100)까지 선을 그었습니다.

두번째는 FromArgb로 선언한 펜을 사용해서 폼 좌표 (200, 200)에서 부터 (300, 300)까지 선을 그었습니다.

따라서 2개 선의 각 길이는 100입니다.

 

* DrawRectangle

사각형을 그리는 함수입니다.

위에 선언한 검은색 펜을 사용해서 미리 선언해둔 rec 사각형을 그립니다.

두 번째는 FromArgb로 선언한 펜을 사용해서 미리 선언해둔 rec2 사각형을 그립니다.

 

* DrawEllipse

원을 그리는 함수입니다.

사각형과 마찬가지로 펜, 사각형을 이용하여 그립니다.

한 가지 주의할 점은 사각형 변에 원의 끝부분이 닿도록 그리기 때문에 대각선으로

선과 원을 연결하도록 그리려면 원을 그리는데 사용하는 사각형의 좌표를 약간 수정해야합니다.

 

* DrawString

문자열을 그리는 함수입니다.

그릴 문자열, 미리 선언한 폰트, 색상을 정할 Brush, 그릴 좌표를 값으로 주어야합니다.

해당 함수의 단점은 Arial 폰트 기준 크기를 12pt로 그렸을 때 배경이 하얀색이 아니면

글자가 깨져보이는 현상이 있었습니다.

따라서 어떤 경우에도 글자를 깔끔하게 보이게 하고 싶다면 다른 방법을 사용해야 합니다.

 

이상으로 Graphics 클래스를 사용하여 간단하게 그리는 법을 알아보았습니다.

관련글 더보기

댓글 영역