Функция черчения линии по точкам C#

232
02 марта 2018, 14:07

Была создана функция для черчения линий между двумя выбранными вручную точками из девяти существующих, но проблема в том, что после рисования первой линии следующая линия ее затирает. В итоге на экране отображается только одна линия из всех. Понимаю, что функция постоянно создает новый Bitmap, и его нужно создать один раз за пределами метода и передавать в метод ссылку на него. Подскажите пожалуйста, как это реализовать в коде. Сама функция:

 public void Lines(int x1, int y1, int x2, int y2)
    {
        Bitmap line = new Bitmap(pic1.Width, pic1.Height);
        Graphics l = Graphics.FromImage(line);
        Pen pen = new Pen(Color.Black)
        {
            Width = 13
        };
        l.DrawLine(pen, x1, y1, x2, y2);
        pic1.Image = line;
    }
Answer 1

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

В начале вашей программы единственный раз: создайте рисунок Bitmap, объект рисования Graphics для него, назначьте этот рисунок соотв. свойству элемента отображения

Bitmap line = new Bitmap(pic1.Width, pic1.Height);
Graphics l = Graphics.FromImage(line);
pic1.Image = line;
//...получаем координаты для линий, и пр.
//затем рисуем столько линий, сколько надо:
Lines(l, x1, y1, x2, y2);//вызываем ф-ию рисования с требуемыми координатами, передавая ей параметром в т.ч. и объект рисования
Lines(l, x10, y10, x20, y20);//какая-то другая линия в тот же Bitmap

функция рисования минимально достаточная:

public void Lines(Graphics l, int x1, int y1, int x2, int y2)
{
    Pen pen = new Pen(Color.Black){ Width = 13  };//задать цвет и толщину линии
    l.DrawLine(pen, x1, y1, x2, y2);//нарисовать в связанный Bitmap.
}
READ ALSO
Изменение кодировки текста

Изменение кодировки текста

Имеется конструкция, которая производит чтение данных либо с текстового файла, либо с клавиатурыВозникло два вопроса:

249
C#. Как заставить форму перемещаться удалив у нее рамку?

C#. Как заставить форму перемещаться удалив у нее рамку?

Добрый деньПодскажите как заставить форму перемещаться удалив у нее рамку? Тоесть у меня у MainForm выключен ControlBox и BorderStyle - None И форма не двигается...

236
Запуск и работы формы только при запущенном процессе

Запуск и работы формы только при запущенном процессе

Как можно сделать так, чтобы форма запускалась и работала только при запущенном процессе?

251
Как определить что программа запущена в первый раз?

Как определить что программа запущена в первый раз?

Как определить что программа запущена в первый раз? Без создания папок или файлов настроекЭти способы я знаю

222