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

时间:2016-11-10 00:10:50

标签: 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;
}

现在我的代码继续执行Bitmap。之后,代码中不相关的部分决定使用该图像完成,并且不再需要保留Bitmap对象。但是,有可能会再次需要它,所以它想要记住sourceImage是什么,以便如果它确实需要它,它知道如何重新创建它。这主要是由于记忆;存储通道字符串比存储(可能)大图像所需的空间更小。

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

我考虑过将sourceImage分配给Tag属性,但是我使用Tag来处理其他事情,我宁愿不要过度复杂化。我希望源信息仍然可以访问,以免给我带来麻烦。

1 个答案:

答案 0 :(得分: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
}

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