C#位图是否记得它的来源?

Cod*_*ody 0 c# winforms

此问题特定于System.Drawing.Bitmap.

考虑这种情况:我创建一个像这样的位图

public Bitmap GetImage(string sourceImage) 
{
   //sourceImage contains something like "C:\\Users\\my.name\\path\\to\\image.jpg"
   //error/valid filename checking omitted in this example
   Bitmap img = new Bitmap(sourceImage);
   return img;
}
Run Code Online (Sandbox Code Playgroud)

现在我的代码去做并做了一些事情Bitmap.稍后,代码的不相关部分决定使用该图像完成,并且不再需要保留该Bitmap对象.但是,有可能再次需要它,所以它想要记住是什么sourceImage,如果它确实需要它,它知道如何重新创建它.这主要是由于记忆; 存储路径串比存储(可能)大图像占用更少的空间.

Bitmap记得它来自哪里,还是必须随身携带这些信息?

我考虑过只分配sourceImage给该Tag属性,但是我正在使用Tag其他东西,我宁愿不要过度复杂化它.我希望源信息仍然可以访问,以免给我带来麻烦.

小智 5

我建议创建一个容器类来提供额外的功能

class BitmapContainer : IDisposable
{
    Bitmap Value {get; private set;}
    string OriginalLocation {get; private set;}

    public BitmapContainer(string sourceImage) 
    {
        Value = new Bitmap(sourceImage);
        OriginalLocation = sourceImage;
        //you get the picture
    }

    //Don't forget to implement a dispose pattern because Bitmap uses native resources
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以使位图getter智能化并加载Bitmap(如果当前未加载),并使用另一种方法卸载(Dispose并设置为null),直到再次需要