Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LD.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
391.17 Кб
Скачать

35. Примеры создания графических изображений в c#.

{

InitializeComponent();

}

float[] x = { 100.78F, 50.12F, 200.99F }; // Массив х-кординат треугольника

float[] y = { 100.45F, 200.77F, 300.18F }; // Массив y-кординат треугольника

private void Form1_Load(object sender, System.EventArgs e)

{

// Задаем размер нашей формы

this.Height = 700;

this.Width = 900;

// Задаем положение pictureBox1, координаты левого верхнего угла относительно формы

this.pictureBox1.Location = new System.Drawing.Point(40, 40);

// Задаем размер pictureBox1

this.pictureBox1.Width = 600;

this.pictureBox1.Height = 500;

// Помещаем кнопку button1 в нижний правый угол формы

this.button1.Left = this.Width - this.button1.Width - 10;

this.button1.Top = this.Height - this.button1.Height-40;

this.button1.Text = "Построить";

}

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

{

// Создаем локальную версию графического объекта для PictureBox

Graphics g = e.Graphics;

// Прорисовка отрезков сторон треугольника

g.DrawLine(Pens.Red, x[0], y[0], x[1], y[1]);

g.DrawLine(Pens.Red, x[1], y[1], x[2], y[2]);

g.DrawLine(Pens.Red, x[0], y[0], x[2], y[2]);

}

private void button1_Click(object sender, EventArgs e)

{

pictureBox1.BackColor = Color.White;

pictureBox1.Visible = true;

// Connect the Paint event of the PictureBox to the event handler method.

pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);

InitializeComponent();

}

private void Forml_Paint(object sender, PaintEventArgs e)

{

using

(Graphics g = e.Graphics)

{

using (Pen pen = new Pen(Color.Red))

{

g.DrawLine(pen, 0, 0, 200, 100);

g.DrawEllipse(pen, new Rectangle(50, 50, 100, 150));

}

string s = "Sample Text";

Font font = new Font("Arial", 18);

SolidBrush brush = new SolidBrush(Color.Black);

float x = 100.0F;

float у = 20.0F;

g.DrawString(s, font, brush, x, у);

font.Dispose();

brush.Dispose();

}

}

}

}

Графика на c#, масштабируемые изображения

Платформа .NET обеспечивает целый набор пространства имен для поддержки визуализации двумерной графики.

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

Для рисования мы будем использовать карандаш Pen, точнее статические свойства семейства Pens.

Например:

Pens.Blue;//карандаш синего цвета

Для заливки используем кисть Brush, аналогично будем использовать его статические свойства brushes.

Например:

Brushes.Blue;//кисть синего цвета.

Непосредственно для рисования используются следующие объекты:

Линия:

DrawLine();.// Для рисования необходимы 5 параметров:

1.цвет линии, используем семейство Pens.

2.Координаты верхнего левого угла

3.Координаты нижнего правого угла

Например:

DrawLine(Pens.Black, 100, 100, 500, 500);

Прямоугольник: (не забываем что сначала заливка а потом обаодка)

FillRectangle();Для рисования необходимы 5 параметров:

1.цвет заливки, используем семейство Brushes.

2.Координаты верхнего левого угла

3.Ширина и высота

Например:

FillRectangle(Brushes.Beige, 100, 100, 500, 500);//залили прямоугольную область

DrawRectangle(Pens.Red, 100, 100, 500, 500);// выполнили обводку

Эллипс:

FillEllipse();Для рисования необходимы 5 параметров:

1.цвет заливки, используем семейство Brushes.

2.Координаты верхнего левого угла

3.Ширина и высота

Например:

FillEllipse(Brushes.Beige, 100, 100, 500, 500);//залили прямоугольную область

DrawEllipse(Pens.Red, 100, 100, 500, 500);// выполнили обводку

Сектор эллипса:

FillPie();Для рисования необходимы 7 параметров:

1.Цвет заливки, используем семейство Brushes.

2.Координаты верхнего левого угла

3.Ширина и высота

4.Угол начала сектора

5.Угол конца сектора

Например:

FillPie(Brushes.Beige, 100, 100, 500, 500, 0, 90);//залили прямоугольную область

DrawPie(Pens.Red, 100, 100, 500, 500, 0, 90);// выполнили обводкуМногоугольник:

Многоугольник, строится по массиву тоыек, поэтому сначала нужно создать массив

Point [] tt={new Point(20, 10), new Point(10, 40),new Point(45,100),new Point(50б 80)};

А после рисуем многоугольник

g.DrawPolygon(Pens.Green,tt);

И при необходимости его заливаем

g.FillPolygon(Pens.Green,tt);

Масштабируемое изображение

Все что мы рассмотрели позволяет рисовать графические примитивы на C#. Но есть одно но, если после создания изображения мы попытаемся изменить размер формы, то мы увидим что размер изображения не меняется. А по мере уменьшения формы изображение срезается, то есть ее часть оказывается, как бы за пределами формы и мы его не видим.

Проблема в том что во время масштабирования формы уменьшается не единица измерения(это не возможно в принципе, так как размер формы измеряется в пикселях ), а уменьшается количество пикселей.

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

Первое что стоит понимать, мы рисуем только на клиентской части формы, то есть нельзя рисовать на заголовке, меню и т.п.

Приступим:

В константе нам нужно прописать, сколько наших единиц будет по вертикали и по горизонтали.

Допустим я решил что форма представляет поле 10х10, тогда запишем

const int x = 10, y=10;

Далее нам понадобится 2 переменные типа int для хранения координат x и y

Int dx, dy;//переменные глобальные))))

Теперь нам нужно пересчитать наши dx и dy.

dx = (this.ClientSize.Width)/x;

dy = (this.ClientSize.Height)/y;

Делать это придется в 2 случаях:

1.При загрузке формы в событие Load

2.Во время изменения размера формы в событии Resize

Отображение рисунка на форме происходит в событии Paint. Это событие срабатывает автоматически при вызове события Load, а вот при изменении размеров его нужно вызвать вручную при помощи команды Refresh();

Далее в событии Paint рисуем обычными методами, но уже используя новые единици измерения.

Например: нам нужно нарисовать прямую из точки (2,2) в точку (5,5)

Graphics g =e.Graphics;//инициализация графики

g.DrawLine(Pens.Black, 2 * dx, 2 * dy, 5 * dx, 5 * dy);//рисование прямой

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]