【问题标题】:C# drawing on picturebox, not persistentC#在图片框上绘图,不持久
【发布时间】:2014-01-07 19:41:04
【问题描述】:

我有一个 List 对象,“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();
    }

每次更改卡片的图像时我都会调用它,但是当我将图片框拖过表单(例如,在其他图片框上)时,我似乎无法让图片在图片框上持续存在。点击和拖动代码只是用鼠标移动图片框,并不相关。

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

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

【问题讨论】:

    标签: c# bitmap paint picturebox


    【解决方案1】:

    这就是绘画的工作原理——您必须处理它的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;
    

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

    PascalCase 提供方法名称。 ;)

    【讨论】:

    • 我不能使用图片框的 image 或 backgroundimage 属性,因为它占用了太多内存 - 我需要将图像绘制到一个空的图片框并让它以某种方式保持不变。这不可能吗?
    • @Codefun64:不,不是。你必须把它保存在某处。另外,你的图片可能比图片框大很多吗?
    • 有点,但这不是我担心内存使用的原因。我正在创建可能成千上万的图片框​​,我需要一种在其中显示图像的方法(可能是所有独特的图像,与我原来的问题中显示的图像不同),并让它们保持不变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多