Была создана функция для черчения линий между двумя выбранными вручную точками из девяти существующих, но проблема в том, что после рисования первой линии следующая линия ее затирает. В итоге на экране отображается только одна линия из всех. Понимаю, что функция постоянно создает новый 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;
}
Потому, что так вы при каждом вызове функции создаёте новый рисунок 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.
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости