C#使用字典处理和重新排序/加载位图
我编写了一个程序,使用一些图片资源并从中创建一个文件。 作为客户预览,图像将在使用前显示。因此,我需要先处理它们,然后才能处理它们。但是我想在之后再次加载预览,因为它可能有大量的图片,所以我想动态加载,但失败了 我使用文件名为字符串的字典:C#使用字典处理和重新排序/加载位图,c#,winforms,bitmap,dispose,C#,Winforms,Bitmap,Dispose,我编写了一个程序,使用一些图片资源并从中创建一个文件。 作为客户预览,图像将在使用前显示。因此,我需要先处理它们,然后才能处理它们。但是我想在之后再次加载预览,因为它可能有大量的图片,所以我想动态加载,但失败了 我使用文件名为字符串的字典: //Creating a Bitmap so we can preview the Picture. try { mainDrawingBackgroundBitmap = ne
//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这样的位图时,我只看到异常
直截了当地说,我在哪里失败了?将图像路径作为键,位图数据作为值,这样操作数据就很容易了,搜索字典的速度也会很快
Dictionary<string, Bitmap>
字典
对不起,这与我的问题有什么关系?另外,我认为搜索一个对象或字符串的速度是一样的,无论如何,我不打算搜索/操作某些东西。@Master117,方法是调用var tempBitmap=tempAllBitmap.Key代码>您正在创建变量的本地副本,而不是以任何方式修改原始字典值。按照Kresimir的建议可以解决这个问题,因为字符串值没有改变。从逻辑的角度来看,以另一种方式使用它也更有意义。问题是,无论是作为值还是作为键都是:tempAllBitmap.Value=newbitmap(tempAllBitmap.Key);或者它允许的反对意见。此外,多个位图可能具有相同的路径/字符串,因此我认为使用字符串作为键可能是正确的troublesome@Master117不同的位图怎么可能来自同一个文件?另外,tempAllBitmap.Value
是允许的,为什么不允许呢?@Master117必须通过重置字典键来实现这一点。e、 g.:theDictionary[theKey]=新值代码>