안녕하세요. 언제나 휴일입니다.
1. Paint 이벤트
이번에는 Windows Forms 앱에서 그리기 방법을 소개할게요.
Windows Forms 앱은 시각화해야 할 영역이 생기면 Paint 이벤트가 발생합니다.
폼을 생성하여 Load할 때, 다른 창에 의해 가려졌다가 다시 보여질 때, 프로그램 방식에 의해 다시 그리는 영역으로 지정(무효화 영역으로 설정)할 때 Paint 이벤트가 발생한다고 볼 수 있어요.
이 때 Paint 이벤트 핸들러에 전달하는 Graphics 개체를 이용하여 그리기 작업을 진행합니다.
public class PaintEventArgs : EventArgs, IDisposable { public PaintEventArgs(Graphics graphics, Rectangle clipRect); public Rectangle ClipRectangle { get; } public Graphics Graphics { get; } }
2. 그리기 예
다음은 Form1에 Paint 이벤트 핸들러를 등록한 후에 Graphics 개체를 이용하여 그리기 작업을 하는 간단한 예제입니다.
(실행 파일이 있는 위치에 demo.png 파일이 있어야 합니다.
using System.Drawing; using System.Windows.Forms; namespace Graphics_개요 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Paint(object sender, PaintEventArgs e) { Graphics graphics = e.Graphics; Rectangle rect = new Rectangle(50, 50, 100, 100); Pen pen = new Pen(Color.Red, 10); graphics.DrawRectangle(pen, rect); Brush brush = new SolidBrush(Color.DarkCyan); graphics.FillRectangle(brush, rect); Font font = new Font("고딕", 12); graphics.DrawString("50,50", font, Brushes.Black, new PointF(25,25)); graphics.DrawString("150,150", font, Brushes.Black, new PointF(125, 163)); Image image = new Bitmap("demo.png"); graphics.DrawImage(image, 200,0,image.Width/8,image.Height/8); } } }
3. 코드 설명
이벤트 인자 e에 멤버 Graphics 속성은 현재 Forms에 그리기 할 수 있는 개체를 참조할 수 있어요.
Graphics graphics = e.Graphics;
Grahpics 형식에는 점이나 선, 도형을 그릴 때 사용하는 다양한 메서드를 제공합니다.
그 중에 사각형을 그리는 메서드는 DrawRectangle입니다.
사각형을 그릴 때 어떠한 펜으로 어느 영역을 그릴 것인지 결정할 수 있습니다.
Rectangle rect = new Rectangle(50, 50, 100, 100); Pen pen = new Pen(Color.Red, 10); graphics.DrawRectangle(pen, rect);
영역을 채울 때는 브러시를 사용합니다.
다음은 속이 꽉 찬 브러시로 사각 영역을 채우는 코드입니다.
Brush brush = new SolidBrush(Color.DarkCyan); graphics.FillRectangle(brush, rect);
Graphics 개체를 이용하여 원하는 폰트로 글을 쓸 수도 있습니다.
다음은 크기가 12인 “고딕” 폰트로 문자열을 출력하는 코드입니다.
Font font = new Font("고딕", 12); graphics.DrawString("50,50", font, Brushes.Black, new PointF(25,25)); graphics.DrawString("150,150", font, Brushes.Black, new PointF(125, 163));
이미지 파일을 로딩하여 화면에 표시하거나 이미지를 그려 파일로 저장할 수도 있어요.
다음은 실행 파일이 있는 폴더에 있는 “demo.png”파일을 로딩하여 화면에 표시하는 코드입니다.
제가 사용한 원본 파일의 크기가 커서 가로, 세로를 1/8로 줄여서 나타냈습니다.
Image image = new Bitmap("demo.png"); graphics.DrawImage(image, 200,0,image.Width/8,image.Height/8);