此问题仅针对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
来处理其他事情,我宁愿不要过度复杂化。我希望源信息仍然可以访问,以免给我带来麻烦。
答案 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)直到需要再次