C#在picturebox上绘图,不是持久的

时间:2014-01-07 19:41:04

标签: c# bitmap paint picturebox

我有一个List<> object,“imagelist”,包含许多图像的路径,例如.png。现在,使用以下代码:

private void paint_picture(PictureBox picture, string pathofpic)
    {
        Graphics g = picture.CreateGraphics();
        Bitmap drawnpic = null;
        if (imagelist.ContainsKey(picture.Name))
        {
            drawnpic = new Bitmap(pathofpic);
            g.DrawImage(drawnpic, 0, 0, picture.Size.Width, picture.Size.Height);
            imagelist[picture.Name] = pathofpic;
        }
        drawnpic.Dispose();
        g.Dispose();
    }

每次更改卡片的图像时我都会调用它,但是当我将图片框拖到窗体上时(例如,在其他图片框上),我似乎无法使图像保持在图片框上。点击和拖动代码只是用鼠标移动图片框,而不是真正相关。

我在取消选择图片时尝试使表单无效,但它没有做任何事情。

有什么我想念的吗?下面的屏幕截图,我在表单周围拖了一个图像,它覆盖了它移动的其他图像:

enter image description here

1 个答案:

答案 0 :(得分:3)

这就是绘画的工作原理 - 你必须处理它的Paint事件,并在每次需要重新绘制时继续绘画。

您可以做的是在原始图像上绘制:

Bitmap b = new Bitmap(picture.Image);

using (Graphics g = Graphics.FromImage(b)) {
    using (Bitmap drawnpic = new Bitmap(pathofpic)) {
        g.DrawImage(drawnpic, 0, 0, b.Width, b.Height);
    }
}

picture.Image = b;

然后您将原始图片保存在某处,并可能在picture.Image行中使用{而不是new Bitmap

PascalCase获取方法名称。 ;)