我大致有这样的逻辑:
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);
问题是,points1和points2包含一些重叠的线段。
如果我画这条线,则重叠部分的颜色与其余部分不同,这是由于相同线段的混合(首先是1与背景混合,然后2与已经混合1与背景混合)。是否有办法实现重叠部分与单个不重叠段的颜色相同的效果?
答案 0 :(得分:4)
DrawLines
在这种情况下将不起作用,因为它只会在一行中绘制已连接的线。
您需要使用GraphicsPath
将行集添加到一个 StartFigure
,以分隔这两个集。
示例,左边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);
}
不要忘记Dispose
和Pen
对象中的Graphics
,或者最好将它们放在using
子句中!