我大致有以下逻辑:
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与背景)。有没有一种方法可以实现重叠部分与单个不重叠段的颜色相同的效果?
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);
}
Run Code Online (Sandbox Code Playgroud)
不要忘记Dispose的Pen和Graphics对象,或者更好,把他们using的条款!
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |