GDI+ — используйте класс Graphics для рисования базовой графики

искусственный интеллект

содержание

рисовать базовую графику

рисовать прямые линии

нарисовать прямоугольник

нарисовать эллипс

нарисовать дугу

сектор розыгрыша

нарисовать многоугольник

рисовать текст

Комплексный случай

рисовать сигнал

Рисование с использованием техники двойной буферизации


рисовать базовую графику

рисовать прямые линии

Метод DrawLine класса Graphics используется для рисования прямой линии. Существует два наиболее распространенных способа перегрузки этого метода:

  1. public void DrawLine(Pen pen,Point pt1,Point pt2)

Описание параметра:

Pen: объект Pen, определяющий цвет, ширину и стиль линии.

pt1: Структура точек, которая представляет собой первую точку для соединения.

pt2: Точечная структура, представляющая вторую соединяемую точку.

Код:

        private void button1_Click(object sender, EventArgs e)

        {

Pen blackPen = new Pen(Color.Black, 3);//Создаем экземпляр класса Pen

Point point1 = new Point(10, 50);//Создаем экземпляр класса Point

Point point2 = new Point(100, 50);//Снова создаем экземпляр класса Point

Graphics g = this.CreateGraphics();//Создаем экземпляр класса Graphics

g.DrawLine(blackPen, point1, point2);//Вызов метода DrawLine для рисования прямой линии

        }

  1. public void DrawLine(Pen pen,int x1,int y1,int x2,int y2)

перо: System.Drawing.Pen, которое определяет цвет, ширину и стиль линии.

x1: Координата x первой точки.

y1: координата y первой точки.

x2: Координата x второй точки.

y2: координата y второй точки.

Код:

            private void button1_Click(object sender, EventArgs e)

        {

Graphics graphics = this.CreateGraphics();//Создание экземпляра класса Graphics

Pen myPen = new Pen(Color.Black, 3);//Создаем экземпляр класса Pen

Graphics.DrawLine(myPen, 150, 30, 150, 100);//Вызов метода DrawLine для рисования прямой линии

      }

нарисовать прямоугольник

Метод DrawRectangle класса Graphics используется для рисования прямоугольников. Существует два распространенных метода перегрузки:

  1. public void DrawRectangle (Pen pen, Rectangle rect);

параметр

Pen: объект Pen, определяющий цвет, ширину и стиль прямоугольника.

rect: структура Rectangle, представляющая прямоугольник для рисования.

Код:

public void DrawRectangleRectangle(PaintEventArgs e)

{

//Создаем черную ручку. 

Pen blackPen = new Pen(Color.Black, 3);

// Создаем прямоугольник.

    Rectangle rect = new Rectangle(0, 0, 200, 200);

// рисуем на экране.

    e.Graphics.DrawRectangle(blackPen, rect);

}

  1. public void DrawRectangle (Pen pen, int x, int y, int width, int height);

параметр

перо: перо, определяющее цвет, ширину и стиль прямоугольника.

x: x-координата верхнего левого угла прямоугольника, который нужно нарисовать.

y: Координата y верхнего левого угла прямоугольника, который нужно нарисовать.

width: Ширина прямоугольника, который будет нарисован.

height: высота рисуемого прямоугольника.

public void DrawRectangleInt(PaintEventArgs e)

{

//Создаем черную ручку.

    Pen blackPen = new Pen(Color.Black, 3);

// Создаем положение и размер прямоугольника.

    int x = 0;

    int y = 0;

    int width = 200;

    int height = 200;

// Рисуем прямоугольник на экране.

    e.Graphics.DrawRectangle(blackPen, x, y, width, height);

}

нарисовать эллипс

Метод DrawEllipse класса Graphics используется для рисования эллипса. Обычно используются следующие перегрузки:

  1. public void DrawEllipse (System.Drawing.Pen pen, System.Drawing.Rectangle rect);

параметр

перо: перо, определяющее цвет, ширину и стиль кривой.

rect: структура Rectangle, определяющая границы эллипса.

Код:

private void DrawEllipseRectangle(PaintEventArgs e)

{

    // Create pen.

    Pen blackPen = new Pen(Color.Black, 3);

    // Create rectangle for ellipse.

    Rectangle rect = new Rectangle(0, 0, 200, 100);

    // Draw ellipse to screen.

    e.Graphics.DrawEllipse(blackPen, rect);

}

  1. public void DrawEllipse (System.Drawing.Pen pen, int x, int y, int width, int height);

параметр

перо: перо, определяющее цвет, ширину и стиль кривой.

x: Координата X левого верхнего угла, определяющая ограничивающую рамку эллипса.

y: Координата Y верхнего левого угла ограничивающей рамки, определяющей эллипс.

ширина: определяет ширину границы эллипса.

высота: определяет высоту границы эллипса.

Код:

private void DrawEllipseInt(PaintEventArgs e)

{

    // Create pen.

    Pen blackPen = new Pen(Color.Black, 3);

    // Create location and size of ellipse.

    int x = 0;

    int y = 0;

    int width = 200;

    int height = 100;

    // Draw ellipse to screen.

    e.Graphics.DrawEllipse(blackPen, x, y, width, height);

}

нарисовать дугу

Метод DrawArc класса Graphics используется для рисования дуг. Два часто используемых метода перегрузки:

1. public void DrawArc (перо, прямоугольник, плавающий угол startAngle, плавающий угол развертки);

параметр

перо: перо, определяющее цвет, ширину и стиль дуги.

rect: структура RectangleF, определяющая границы эллипса.

startAngle: угол (в градусах), измеренный по часовой стрелке от оси x до начальной точки дуги.

SweepAngle: угол (в градусах), измеренный по часовой стрелке от параметра startAngle до конечной точки дуги.

Код:

private void DrawArcRectangle(PaintEventArgs e)

{

   // Create pen.

    Pen blackPen= new Pen(Color.Black, 3);

    // Create rectangle to bound ellipse.

    Rectangle rect = new Rectangle(0, 0, 100, 200);

    // Create start and sweep angles on ellipse.

    float startAngle =  45.0F;

    float sweepAngle = 270.0F;

    // Draw arc to screen.

    e.Graphics.DrawArc(blackPen, rect, startAngle, sweepAngle);

}

  1. public void DrawArc (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle);

параметр

перо: перо, определяющее цвет, ширину и стиль дуги.

x: координата x верхнего левого угла прямоугольника, определяющего эллипс.

y: координата y верхнего левого угла прямоугольника, определяющего эллипс.

ширина: ширина прямоугольника, определяющего эллипс.

высота: высота прямоугольника, определяющего эллипс.

startAngle: угол (в градусах), измеренный по часовой стрелке от оси x до начальной точки дуги.

SweepAngle: угол (в градусах), измеренный по часовой стрелке от параметра startAngle до конечной точки дуги.

Код:

private void DrawArcInt(PaintEventArgs e)

{

    // Create pen.

    Pen blackPen= new Pen(Color.Black, 3);

    // Create coordinates of rectangle to bound ellipse.

    int x = 0;

    int y = 0;

    int width = 100;

    int height = 200;

    // Create start and sweep angles on ellipse.

    int startAngle =  45;

    int sweepAngle = 270;

    // Draw arc to screen.

    e.Graphics.DrawArc(blackPen, x, y, width, height, startAngle, sweepAngle);

}

сектор розыгрыша

Рисование сектора использует метод DrawPie Graphics. Общие методы перегрузки следующие:

  1. public void DrawPie (Pen pen, Rectangle rect, float startAngle, float sweepAngle);

параметр

перо: перо, определяющее цвет, ширину и стиль веера.

rect: структура Rectangle, представляющая ограничивающую рамку, определяющую эллипс, которому принадлежит этот сектор.

startAngle: угол (в градусах), измеренный по часовой стрелке от оси x до первого края сектора.

SweepAngle: угол (в градусах), измеренный по часовой стрелке от параметра startAngle до второго края веера.

Код:

public void DrawPieRectangle(PaintEventArgs e)

{

    // Create pen.

    Pen blackPen = new Pen(Color.Black, 3);

            

    // Create rectangle for ellipse.

    Rectangle rect = new Rectangle(0, 0, 200, 100);

    // Create start and sweep angles.

    float startAngle =  0.0F;

    float sweepAngle = 45.0F;

    // Draw pie to screen.

    e.Graphics.DrawPie(blackPen, rect, startAngle, sweepAngle);

}

  1. public void DrawPie (Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle);

параметр

перо: перо, определяющее цвет, ширину и стиль веера.

x: координата x верхнего левого угла границы, определяющей эллипс, которому принадлежит сектор.

y: Координата y верхнего левого угла границы, которая определяет эллипс, к которому принадлежит сектор.

ширина: ширина границы, которая определяет эллипс, к которому принадлежит сектор.

высота: высота границы, которая определяет эллипс, к которому принадлежит сектор.

startAngle: угол (в градусах), измеренный по часовой стрелке от оси x до первого края сектора.

SweepAngle: угол (в градусах), измеренный по часовой стрелке от параметра startAngle до второго края веера.

Код:

public void DrawPieInt(PaintEventArgs e)

{

    // Create pen.

    Pen blackPen = new Pen(Color.Black, 3);

    // Create location and size of ellipse.

    int x = 0;

    int y = 0;

    int width = 200;

    int height = 100;

    // Create start and sweep angles.

    int startAngle =  0;

    int sweepAngle = 45;

    // Draw pie to screen.

    e.Graphics.DrawPie(blackPen, x, y, width, height, startAngle, sweepAngle);

}

нарисовать многоугольник

Метод DrawPolygon класса Graphics используется для рисования многоугольников. Распространенные перегруженные методы:

  1. public void DrawPolygon (Pen pen, System.Drawing.Point[] points)

параметр

перо: перо, определяющее цвет, ширину и стиль полигона.

точки: массив структур Point, представляющих вершины многоугольника.

Код:

private void button1_Click(object sender, EventArgs e)

        {

Graphics ghs = this.CreateGraphics();//Создаем экземпляр класса Graphics

Pen myPen = new Pen(Color.Black, 3);//Создаем экземпляр класса Pen

Point point1 = new Point(80, 20);//Создаем экземпляр класса Point для представления первой точки

Point point2 = new Point(40, 50);//Создаем экземпляр класса Point для представления второй точки

Point point3 = new Point(80, 80);//Создаем экземпляр класса Point для представления третьей точки

Point point4 = new Point(160, 80);//Создаем экземпляр класса Point для представления четвертой точки

Point point5 = new Point(200, 50);//Создаем экземпляр класса Point для представления пятой точки

Point point6 = new Point(160, 20);//Создаем экземпляр класса Point для представления шестой точки

Point[] myPoints ={ point1, point2, point3, point4, point5, point6 };//Создаем массив структур Point

ghs.DrawPolygon(myPen, myPoints);//Вызов метода DrawPolygon объекта Graphics для рисования многоугольника

        }

рисовать текст

Текст рисования использует метод DrawString класса Graphics. Распространенные перегруженные методы:

  1. public void DrawString (string s, System.Drawing.Font font, System.Drawing.Brush brush, System.Drawing.RectangleF layoutRectangle);

параметр

s: Строка для рисования.

font: Шрифт, который определяет текстовый формат строки.

кисть: кисть, которая определяет цвет и текстуру нарисованного текста.

layoutRectangle: структура RectangleF, указывающая расположение нарисованного текста.

Код:

public void DrawStringRectangleF(PaintEventArgs e)

{

    // Create string to draw.

    String drawString = "Sample Text";

    // Create font and brush.

    Font drawFont = new Font("Arial", 16);

    SolidBrush drawBrush = new SolidBrush(Color.Black);

    // Create rectangle for drawing.

    float x = 150.0F;

    float y = 150.0F;

    float width = 200.0F;

    float height = 50.0F;

    RectangleF drawRect = new RectangleF(x, y, width, height);

    // Draw rectangle to screen.

    Pen blackPen = new Pen(Color.Black);

    e.Graphics.DrawRectangle(blackPen, x, y, width, height);

    // Draw string to screen.

    e.Graphics.DrawString(drawString, drawFont, drawBrush, drawRect);

}

  1. public void DrawString (string s, System.Drawing.Font font, System.Drawing.Brush brush, System.Drawing.PointF point);

параметр

s: Строка для рисования.

font: Шрифт, который определяет текстовый формат строки.

кисть: кисть, которая определяет цвет и текстуру нарисованного текста.

точка: структура PointF, указывающая верхний левый угол нарисованного текста.

Код:

public void DrawStringPointF(PaintEventArgs e)

{

    // Create string to draw.

    String drawString = "Sample Text";

    // Create font and brush.

    Font drawFont = new Font("Arial", 16);

    SolidBrush drawBrush = new SolidBrush(Color.Black);

    // Create point for upper-left corner of drawing.

    PointF drawPoint = new PointF(150.0F, 150.0F);

    // Draw string to screen.

    e.Graphics.DrawString(drawString, drawFont, drawBrush, drawPoint);

}

  1. public void DrawString(string s, Font font, Brush brush, float x, float y)

параметр:

s: Строка для рисования.

font:System.Drawing.Font, который определяет текстовый формат строки.

кисть: System.Drawing.Brush, определяющая цвет и текстуру нарисованного текста.

x: x-координата верхнего левого угла нарисованного текста.

y: Координата y верхнего левого угла нарисованного текста.

private void button1_Click(object sender, EventArgs e)

        {

String str = "Shenmatang;//Определяем нарисованную строку

Font myFont = new Font("Chinese Xingkai", 20);//Создаем экземпляр объекта Font

SolidBrush myBrush = new SolidBrush(Color.DarkOrange);//Создаем экземпляр объекта кисти

Графика myGraphics = this.CreateGraphics();//Создаем графический объект

MyGraphics.DrawString(str, myFont, myBrush,10,20);//Рисуем текст

        }

Комплексный случай

рисовать сигнал

 

  

private void button1_Click(object sender, EventArgs e)

   {

Graphics graphics = this.CreateGraphics();//Создаем экземпляр класса Graphics формы

Pen myPen = new Pen(Color.Black, 1);//Устанавливаем перо

int beginX = 50; // определяем переменные

            int beginY = 65;

            int height = 35;

            int width = 50;

            Point pointX1 = new Point(beginX, beginY);

            Point pointY1 = new Point(beginX + 210, beginY);

            Point pointX2 = new Point(beginX, beginY - 45);

            Point pointY2 = new Point(beginX, beginY + 45);

//Вызываем метод DrawLine для рисования двух вертикально пересекающихся прямых линий, которые используются в качестве горизонтальных и вертикальных координат сигнала

            graphics.DrawLine(myPen, pointX1, pointY1);

            graphics.DrawLine(myPen, pointX2, pointY2);

//Рисуем кривую Безье с шахматным соединением верхней половины площади

            graphics.DrawBezier(myPen, beginX, beginY, beginX + 15, beginY - height, beginX + 40, beginY - height, beginX + width,beginY);   

//Нарисуйте кривую Безье ступенчатого соединения в нижней части графика. * 2 , началоY);

// Нарисуйте кривую Бесселя верхней половины площади чередующегося соединения

graphics.DrawBezier(myPen, beginX + width * 2, beginY, beginX + width * 2 + 15, beginY - height, beginX + width * 2+ 40, beginY - height, beginX + width * 3, beginY);

/ Нарисуйте нижнюю половину области Перемежающаяся кривая Бесселя Graphics.drawbezier (Mypen, Beginy + Width * 3, Beginy, Beginy + Width * 3 + 15, Beginy + Height, Beginx + Width * 3+ 40, Beginy + Height, Beginx + Width * 4, Бегини; /

  }

Рисование с использованием техники двойной буферизации

Двойная буферизация заключается в создании объекта в памяти, соответствующего области рисования экрана, сначала отрисовке графики объекта в памяти, а затем одновременном копировании графики объекта на экран, что может значительно ускорить скорость рисования. Он в основном используется для решения проблемы мерцания формы при изменении ее размера.

Процесс двойной буферизации выглядит следующим образом:

1. Создайте буфер в памяти, соответствующий холсту

2. Рисование в буфере

3. Скопируйте растровое изображение буфера на текущий холст.

4, освободить буфер памяти

Код:

    public partial class Frm_Main : Form

    {

        public Frm_Main()

        {

            InitializeComponent();

        }

        private void PaintImage(Graphics g)

        {

// Рисование

            GraphicsPath path = new GraphicsPath(new Point[]{ new Point(100,60),new Point(350,200),new Point(105,225),new Point(190,ClientRectangle.Bottom),

                new Point(50,ClientRectangle.Bottom),new Point(50,180)}, new byte[]{

                    (byte)PathPointType.Start,

                    (byte)PathPointType.Bezier,

                    (byte)PathPointType.Bezier,

                    (byte)PathPointType.Bezier,

                    (byte)PathPointType.Line,

                    (byte)PathPointType.Line});

            PathGradientBrush pgb = new PathGradientBrush(path);

            pgb.SurroundColors = new Color[] { Color.Green, Color.Yellow, Color.Red, Color.Blue, Color.Orange, Color.LightBlue };

            g.FillPath(pgb, path);

g.DrawString("Добро пожаловать в Shenmatang!!", new Font("宋体", 18, FontStyle.Bold), new SolidBrush(Color.Red), new PointF(110, 20));

            g.DrawBeziers(new Pen(new SolidBrush(Color.Green),2),new Point[] {new Point(220,100),new Point(250,180),new Point(300,70),new Point(350,150)});

            g.DrawArc(new Pen(new SolidBrush(Color.Blue), 5), new Rectangle(new Point(250, 170), new Size(60, 60)), 0, 360);

            g.DrawRectangle(new Pen(new SolidBrush(Color.Orange), 3), new Rectangle(new Point(240, 260), new Size(90, 50)));

        }

 

        private void Form1_Paint(object sender, PaintEventArgs e)

        {

            Bitmap localBitmap = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);

//Создаем экземпляр растрового изображения

            Graphics bitmapGraphics = Graphics.FromImage(localBitmap);

            bitmapGraphics.Clear(BackColor);

            bitmapGraphics.SmoothingMode = SmoothingMode.AntiAlias;

            PaintImage(bitmapGraphics);

Graphics g = e.Graphics;//Получить холст формы

g.DrawImage(localBitmap, 0, 0);//Рисуем изображение в памяти на холсте формы

            bitmapGraphics.Dispose();

            localBitmap.Dispose();

            g.Dispose();

        }

  }

Эффект: