c#位图还记得它来自哪里吗?

本文关键字:位图 还记得 | 更新日期: 2023-09-27 18:17:07

这个问题是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用于其他事情,我宁愿不要使它过于复杂。我希望源信息仍然可以访问,以节省我的麻烦。

c#位图还记得它来自哪里吗?

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

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
}

你甚至可以使位图获取器智能化,如果当前没有加载,就加载位图,并有另一种方法来卸载(Dispose并设置为null),直到再次需要