집 >백엔드 개발 >C#.Net 튜토리얼 >C# GDI+ 프로그래밍 (1)
C++이지만 항상 유사점이 있습니다.
창이 새로 고쳐지면 Paint 이벤트가 생성되므로 이 이벤트에 핸들러 함수를 추가합니다. 그런 다음 이 함수에서 그래프를 그립니다. 이렇게 하면 그려진 그림이 새로 고쳐지지 않고
항상 표시될 수 있습니다. Paint 이벤트에 해당하는 대리자는 다음과 같습니다. public 대리자 void PaintEventHandler(object sender, PaintEventArgs e);
가장 간단한 그리기부터 시작하여 창에 선을 그립니다. (WindowsForms 애플리케이션 생성)
public 부분 클래스 Form1: Form
{
public Form1()
InitializeComponent() 🎜> //Paint 이벤트 핸들러 함수 추가
this. Paint += formPaint;
private void formPaint(Object sender, PaintEventArgs e)
{
그래프 ics 그래픽 = e.Graphics;
//브러시, 녹색, 2픽셀 너비
Pen Pen = New Pen (color.fromargb (0,255,0), 2)
// 선을 그립니다. 두 점은 0,0과 100,100입니다.
DrawLine (pen, new Point (0) ,0), 새 포인트(100,100))를 완료합니다.
예 2: 채워진 직사각형
그래픽 그래픽 = e.Graphics;
//파란색 브러시
//사각형
Rectangle ect = new Rectangle(0, 0, 100, 100);//사각형 채우기
Graphics.FillRectangle(brush, ret)
예시 3: png 그림 그리기(PNG는 투명한 그림을 표시할 수 있기 때문에 사용되며 GIF 그림에도 이 효과가 있습니다.)
private void formPaint(Object sender, PaintEventArgs e)
{
그래픽 그래픽 = e.Graphics; 그림은 시작 위치를 보여줍니다.
Point strPoint=new Point(50,50) 🎜> Rectangle ect=new Rectangle(50,50,100,100);
}
DrawString을 사용하여 텍스트 표시
Grahpics 클래스의 DrawString 여러 오버로드가 있으며 일부 오버로드는 사각형 내에 문자열을 표시하고 일부는 특정 표시 형식을 사용합니다. 여기서는 자세히 설명하지 않겠습니다.
더 일반적으로 사용되는 것들만 논의하겠습니다.
예제를 보면 키보드 입력 문자 이벤트를 처리하고, 입력된 문자를 창에 표시해 줍니다. 다음과 같습니다:
공개 부분 클래스 Form1: Form
{
public static String strText = "";
public Form1()
Component() 초기화;
this.Paint += formPaint;
this.KeyPress += formKeyPress;
}
private void formPaint(Object sender, PaintEventArgs e)
{
Graphics Graphics = e.Graphics;
/ /브러시 만들기 }
private void formKeyPress(object sender, KeyPressEventArgs e)
{
strText += e.KeyChar;
//전체 창 새로 고침
this.Invalidate();
}
}
그래픽 s.DrawString(strText,font,brush, new Point(100, 100))도 있습니다. 이는 단지 텍스트 표시의 시작 위치를 지정합니다.
표시 형식에 대한 다음 예를 참조하세요.
//직사각형 내에 문자열 표시
StringFormat strFormat = new StringFormat(StringFormatFlags.DirectionRightToLeft);
Graphics.DrawString( strText,font,brush,this.ClientRectangle,strFormat);
StringFormatFlags는 열거형 유형으로 각 열거형 멤버가 어떤 형식을 나타내는지 하나씩 확인해 보세요.
다음으로 살펴보겠습니다. Form 클래스의 기본 이벤트 처리 방법과 추가한 이벤트 처리 방법 사이에는 어떤 관계가 있나요?
예: 마우스 왼쪽 버튼 이벤트 처리
공개 부분 클래스 Form1 : Form
{
private Color prBackColor;
public Form1()
InitializeComponent();
//창의 기본 배경색
prBackColor = this.BackColor;
// 마우스 버튼 누르기 이벤트 처리 방법
private void formMouseDown(object sender, MouseEventArgs e)
// 마우스 오른쪽 버튼을 누른 경우
if (e .Button == MouseButtons.Right)
{
Form1 form1 = (Form1)sender;
//배경색 변경
form1.BackColor = Color.FromArgb(0, 255, 0);
}
시작(해제) 이벤트 처리 방법
private void formMouseUp(object sender, MouseEventArgs e)
{
if(e.Button==MouseButtons.Right)
{
Form1 form1 = ( Form1)sender; 기본 이벤트 처리 방법이 있으며 이러한 방법은 가상 방법이므로
protected virtual void OnMouseDown(MouseEventArgs e); OnMouseUp(MouseEventArgs e);
이렇게 하면 이벤트 처리 메서드를 추가하지 않고도 마우스 이벤트를 처리할 수 있으며, 상위 클래스의 기본 이벤트 처리 메서드를 재정의하여 위의 예제를 구현할 수 있습니다.
MSDN을 확인하면 이러한 기본 이벤트 처리 방법을 호출하면 해당 이벤트가 트리거될 수 있음을 알 수 있습니다. 예를 들어 OnMouseDown을 호출하면 추가한 이벤트 처리 메서드(대리자)가 실제로 실행되는 마우스 왼쪽 버튼 누르기 이벤트를 트리거할 수 있습니다. 그리고 우리는 위임 방법을 추가하기 위해 "+="를 사용하기 때문에 여전히 멀티캐스트 위임을 사용합니다.
이 경우 OnMouseDown을 재정의하는 경우 해당 기본 클래스의 OnMouseDown 메서드를 호출해야 합니다.
이제 위 내용을 알았으니 실제적인 예를 들어보겠습니다. 배경을 그리는 OnPaintBackground 메서드를 재정의합니다.
public 부분 클래스 Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//OnPaintBackground 메서드 재정의
protected override void OnPaintBackground (PaintEventArgs e)
> 러시, This.ClientRectangle)
// 그리기 원 Pen Pen = New Pen (Color.FromArgb(0, 255, 0),3);
e.Graphics.DrawEllipse(pen, this.ClientRectangle);
}
}
TextureBursh 그림 브러시
그림을 사용하여 직사각형, 원 등의 도형을 채울 수 있습니다. 이미지가 충분히 크지 않으면 타일로 표시됩니다.
예:
{
Graphics Graphics = e.Graphics;//그림 만들기 Brush
Rectangle ect = new Rectangle(10, 10, 70, 70);TextureBrush 브러시 = new TextureBrush(Image.FromFile("d:\Image\345.jpg"),ect);
Graphics.FillEllipse( 브러시 , 0, 0, 200, 200); }
생성자의 마지막 매개변수인 ect는 그림에서 채울 부분을 나타내고, 10,10은 그림의 시작 위치를 나타냅니다(왼쪽 위). 모서리), 70, 70은 너비와 높이를 나타냅니다. 그림의 원래 범위를 초과하지 않도록 주의하십시오. 그림 전체가 채워지면 ret를 지정할 필요가 없습니다. 생성자에 매개변수만 입력하면 됩니다.
LinearGradientBursh 선형 그래디언트 브러시(이 클래스는 System.드로잉.드로잉2D 네임스페이스에 있음)
LinearGradientBursh 클래스에는 2개의 점과 2개의 색상으로 구성된 4개의 매개 변수가 있는 생성자 오버로드가 있습니다. .
{
public Form1(){
InitializeComponent();this .Paint += formPaint;
}
private void formPaint(Object sender, PaintEventArgs e)
{
Graphics Graphics = e.Graphics;
Linear GradientBrush lineBrush = new LinearGradientBrush(new Point(0, 0), new 포인트(50, 0),
. 전체 창
그래픽.FillRectangle( lineBrush,this .ClientRectangle);
}
}
{
Graphics = e.Graphics;
LineBrush = new LinearGradientBrush dientBrush(new Point(0, 0), new Point( 50 , 50),
Color.FromArgb(255, 255, 255), Color.FromArgb(0, 0, 0));
전체 창 채우기
graphics.FillRectangle(lineBrush, this.ClientRectangle) ;
펜 펜 = new Pen(Color.FromArgb(0, 255,0));
graphic.DrawRectangle(pen, 0, 0, 50, 50);
}
private void formPaint(Object sender, PaintEventArgs e)
{
//ColorBlend 객체를 생성하고 여러 색상 그라데이션 정보 지정
ColorBlend color_blend=new ColorBlend();
// 몇 가지 색상
color_blend.Colors=new Color[]{Color.Red,Color.Green,Color.Blue};
~ color_blend.Colors=새로운 색상[]{Color.Red,Color.Green, 색상. Blue}; 3f,2/3f,3/3f};
Rectangle ect=new Rectangle(0,0,200,100);
//그라디언트 브러시 만들기
LinearGradientBrush 브러시=
new LinearGradientBrush(new Point(0 ,0),new Point(200,0),Color.White,Color.White);
brush.InterpolationColors=color_blend;
e.Graphics.FillRectangle(brush,Rect);
}
범위 내에서 완성되면 녹색에서 파란색으로의 그라데이션 범위는 2/3f ~ 3/3f입니다.
각각 절반씩 공유하려면 color_blend.Positions=new float[]{0/2f,1/2f,2/2f};
더 많은 C# GDI+ 프로그래밍(1) 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!