如何将 PictureBox Image 的引用附加到变量而不是变量的对象?

How to keep a reference of PictureBox Image attached to a variable and not to an object of the variable?

我在 C# 中工作,希望将 PictureBox.Image 的引用附加到变量而不是变量的对象。这意味着我想自由更改此变量的对象,而 PictureBox 将始终引用该变量。

我有一个 class 可以处理图像、合并它们和 returns 图像 ImageShow 以在 PictureBox 中可视化。通常我必须将新的 Image 对象分配给一个变量。当我这样做时,PictureBox 会保留旧对象,而我希望它采用新对象。

class Foo
{
   Image ImageShow = null;

   public void FooFunc()
   {
      //some code
      changeImageSize(new Size(600,800))
   }

   private void changeImageSize(Size newSize)
   {
      if(ImageShow != null)
         ImageShow.Dispose();
      ImageShow = new Bitmap(newSize.Width, newSize.Height);
   }
}

当我执行这样的代码时:

var obj = Foo();
obj.SetImage(new Bitmap(50,50));
pictureBox.Image = obj.GetImage();
obj.FooFunc();

PictureBox 保留已销毁的旧 Image 对象。因此,如果我尝试对 PictureBox 执行任何操作,就会出现错误。

每次返回一个新的图像对象会在 class 和 PictureBox 的内部代码之间产生许多依赖关系。所以这对我来说不是最好的解决方案。

简单示例:

Image img;

img = new Bitmap(200, 200);
pictureBox1.Image = img;

img = new Bitmap(300, 300);

Picturebox 继续引用旧图像

pictureBox1.Image.Size = {Width = 200 Height = 200}

虽然我想引用 img 变量和新对象

您可以查看使用 PictureBox.Bindings.Add() 绑定 PictureBoxImage 属性 并使对象绑定到实现 INotifyPropertyChanged 所以当您为该对象设置图像 属性 时,Picturebox 会更新 - 或者,更简单地说,您可以将 ImageShow 封装在 属性 中,并添加将图片框更新到 setter.

private Image _imageShow = null;
public Image ImageShow {
    get {
        return _imageShow
    }
    set {
        _imageShow = value;
        pictureBox1.Image = value;
    }
}

然后,每当您将 ImageShow 设置为新图像时,PictureBox 将设置为相同的图像。

您的代码无法按原样工作的原因是因为 ImageShow 正在存储对 Image 的引用,并且设置 pictureBox1.Image 会将 属性 设置为对相同 Image 的引用 - 但如果您更改 ImageShow 引用的内容, PictureBox 将永远不会看到它,因为它引用的是原始图像,而不是字段 ImageShow .