如何在图像中绘制移动线

时间:2017-05-03 07:19:03

标签: c# gdi

我正在尝试在与其上的光标位置对应的白色矩形上绘制一条水平线。

public static void CreateMapHistoGramModifiedByColourBar(int LineYindex)
{
    float[] dashValues = { 1, 1, 1 };
    Pen blackPen = new Pen(Color.Black, 1);
    blackPen.DashPattern = dashValues;
    Point P1 = new Point(0, LineYindex);
    Point P2 = new Point(RefBarWidth, LineYindex);
    using (Graphics g = Graphics.FromImage(Image.FromFile(WaferMapHistogramFileName)))
    {
        g.DrawLine(blackPen, P1, P2);
    }
}

以上代码似乎对保存的图像没有任何作用。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

使用 Cursor.Position.YCursor.Position.X获取鼠标在屏幕上的位置。然后,您可以将这些偏移来计算您的白色矩形在表格上的位置。

如果您希望在移动鼠标时刷新此行,请将重绘/重绘事件与鼠标移动事件MouseMove联系起来。如果在重绘

之前首先在PictureBox使用pictureBox1.InitialImage = null;内绘制

答案 1 :(得分:0)

判断这一行:

  

上面提到的代码似乎没有对保存的图像做任何事情

听起来你想在图像上画一条线,然后将新图像保存回来。目前你所做的只是加载一个Image对象,借鉴它然后丢弃它:

using (Graphics g = Graphics.FromImage(Image.FromFile(WaferMapHistogramFileName)))
{
    g.DrawLine(blackPen, P1, P2);
}

请注意,Image类还会实现IDisposable,因此您应该将其处理掉。

把所有这些放在一起,你应该得到这样的东西:

using (Image image = Image.FromFile(WaferMapHistogramFileName))
using (Graphics g = Graphics.FromImage(image))
{
    g.DrawLine(blackPen, P1, P2);

    image.Save(@"Save somewhere, here: WaferMapHistogramFileName?");
}

请注意,将图片保存回WaferMapHistogramFileName将覆盖原始图片。

旁注;从这一行:

  

对应光标位置

在图像上绘制一条线,根据光标在其上的位置判断。如果是这种情况,您应该确保偏移光标位置,因为它会在ScreenFormControl上为您提供位置。