用相同的透明度绘制重叠线

Mar*_*rry 3 c# graphics gdi+

我大致有以下逻辑:

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);
Run Code Online (Sandbox Code Playgroud)

问题是,points1和points2包含一些重叠的线段。

如果我画这条线,则重叠部分的颜色与其余部分不同,这是由于相同线段的混合(首先是1与背景,然后2与已经混合的1与背景)。有没有一种方法可以实现重叠部分与单个不重叠段的颜色相同的效果?

TaW*_*TaW 5

DrawLines不会在这种情况下工作,因为它会只画出连接在行一个走。

您需要使用来将线集添加到其中一个 GraphicsPathStartFigure两组分离

例如,Drawline在左侧,DrawPath在右侧:

在此处输入图片说明

这是两者的代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

不要忘记DisposePenGraphics对象,或者更好,把他们using的条款!