Нарисуйте перекрывающиеся линии с одинаковой прозрачностью - PullRequest
0 голосов
/ 02 января 2019

У меня примерно такая логика:

Bitmap bmp = ....
Pen pen = new Pen(Color.FromArgb(125, 0, 0, 255), 15);
var graphics = Graphics.FromImage(bmp);
graphics.DrawLines(pen, points1);
graphics.DrawLines(pen, points2);

Проблема в том, что точки1 и точки2 содержат некоторые отрезки линий, которые перекрываются.

Если я рисую эти линии, перекрывающаяся часть имеетдругой цвет, чем у остальных, из-за смешивания тех же сегментов (сначала 1 с фоном, а затем 2 с уже смешанным 1 с фоном).Есть ли способ, как добиться эффекта, чтобы перекрывающиеся части имели тот же цвет, что и отдельные непересекающиеся сегменты?

1 Ответ

0 голосов
/ 02 января 2019

DrawLines не будет работать в этом случае, поскольку он будет рисовать только подключенные линии в один ход.

Вам необходимо добавить наборы линий в один GraphicsPath с использованием StartFigure до отдельных двух комплектов.

Пример, Drawline слева, DrawPath справа:

enter image description here

Вот код для обоих:

using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
..
Pen pen = new Pen(Color.FromArgb(125, 0, 0, 255), 15)
   { LineJoin = LineJoin.Round };
var graphics = Graphics.FromImage(bmp);
graphics.Clear(Color.White);
graphics.DrawLines(pen, points1);
graphics.DrawLines(pen, points2);
bmp.Save("D:\\__x19DL", ImageFormat.Png);

graphics.Clear(Color.White);
using (GraphicsPath gp = new GraphicsPath())
{
    gp.AddLines(points1);
    gp.StartFigure();
    gp.AddLines(points2);
    graphics.DrawPath(pen, gp);
    bmp.Save("D:\\__x19GP", ImageFormat.Png);
}

Не забудьте Dispose объекта Pen и Graphics или, лучше, поместить их в using предложения!

...