【问题标题】:Draw and update PictureBox绘制和更新 PictureBox
【发布时间】:2017-03-12 07:34:28
【问题描述】:

我创建了一个简单的示例,用于绘制分配给Picturebox 的图像。 我处理MouseDownMouseUp 事件,获取当前鼠标位置,并在MouseUp 事件的末尾画一条线。

 private void Form1_Load(object sender, EventArgs e)
    {
        Bitmap image = new Bitmap("myImage.png");
        pictureBox1.Image = image;
    }

    Point From, To;
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        From = new Point(e.X, e.Y);
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawLine(Pens.Red, From, To);
    }

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
        To = new Point(e.X, e.Y);
        pictureBox1.Refresh();
    }

代码有效,但它总是在第一个初始图像上绘制,我想在更新上绘制(在图像上创建的新行)。

我希望我的问题很清楚。

谢谢。

【问题讨论】:

  • 不,不清楚。该代码根本没有绘制到图像上,而是在图片框的位置上
  • @Plutonix 根本不绘制图像是什么意思?
  • 传递的e.Graphics 用于控件,它不会将这些行添加到实际图像中。看起来它们是图像的一部分,这可能是您想要的,但不清楚
  • @Plutonix 哦..如果我想在当前图像上绘制我应该怎么做?

标签: c# image controls


【解决方案1】:

你可以试试这个,它对我有用:

Graphics graph = Graphics.FromImage(image);
if (e.Button == MouseButtons.Left)
{
    graph.DrawLine(Pens.Red, From.X, From.Y, e.X, e.Y);
    pictureBox1.Image = image;
}

此外,我建议您使用MouseMove 事件,使线条更流畅(不知道这是否是您想要的,但无论如何),如下所示:

    int x, y;

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        x = e.X;
        y = e.Y;
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        Graphics graph = Graphics.FromImage(image);
        if (e.Button == MouseButtons.Left)
        {
            graph.DrawLine(Pens.Red, x, y, e.X, e.Y);
            pictureBox1.Image = image;
            x = e.X;
            y = e.Y;
        }
    }

希望能帮到你:D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 2011-09-08
    • 2018-07-06
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    相关资源
    最近更新 更多