C#使用字典处理和重新加载/加载位图

时间:2012-08-27 07:42:13

标签: c# winforms bitmap dispose

我编写了一个使用一些图片资源并从中创建文件的程序。 作为客户预览,图像会在使用之前显示。因此我需要先处理它们才能使用它们。但是我想要之后再次加载预览,因为它可能是我想动态做的大量图片,我失败了。

我使用一个字典名为String的字典:

            //Creating a Bitmap so we can preview the Picture.
        try
        {
            mainDrawingBackgroundBitmap = new Bitmap(filePathBackgroundBackgroundImage);

            if(mainAllBitmapsDictionary.ContainsKey(mainDrawingBackgroundBitmap))
            {
                mainAllBitmapsDictionary.Remove(mainDrawingBackgroundBitmap);
            }     
            mainAllBitmapsDictionary.Add(mainDrawingBackgroundBitmap,filePathBackgroundBackgroundImage);
        }

现在我的位图和路径都在字典中,稍后我会这样处理它们:

        private void DisposeAllFiles()
    {
        foreach (var tempBitmap in mainAllBitmapsDictionary.Keys)
        {
            tempBitmap.Dispose();
        }
    }

哪种方法效果很好。 现在,当我尝试重新创建位图时:

        private void RessurrectAllFiles()
    {
        foreach (var tempAllBitmap in mainAllBitmapsDictionary)
        {
            try
            {
                var tempBitmap = tempAllBitmap.Key;
                tempBitmap = new Bitmap(tempAllBitmap.Value);
            }
            catch (ArgumentException ae)
            {
            }
        }

    }

他没有失败或抛出错误,字典甚至充满了正确的位图和字符串但是,那些似乎不再影响原始对象,所以字典就像它一样,但当我检查一个位图像:mainDrawingBackgroundBitmap,我只看到ArgumentExceptions。

坦率地说,我在哪里失败?

1 个答案:

答案 0 :(得分:1)

将图像路径保持为键,将位图数据保存为值,这样您就可以轻松地操作数据并且搜索字典将快速执行。

Dictionary<string, Bitmap>