我在.NET应用程序中为我的ListView使用ImageList时遇到了一些问题。在我的实现中,这个ImageList可以容纳几千个图像,具体取决于使用情况。当我试图处理大量图像时,最初出现这个问题。一旦我越过5K +图像,我遇到了试图添加图像的通用“图像无法添加到ImageList”异常。发生这种故障的确切数字稍微增加了一点。.NET ImageList实现中的ImageList容量错误?
因此,在试图解决这个问题时,我试图使用本机ImageList_SetImageCount函数来扩展ImageList的容量。这很好,解决了我眼前的问题。我必须使用ImageList [index] =图像而不是.Add()方法填充列表。 这一切都很好,但是当把图像拉出来的时候,问题就出现了。现在,无论何时我通过索引引用ImageList中的图像,我都会得到一个Out of Memory Exception。位图x = ImageList [任何索引]都会崩溃。
我尝试过追逐这许多不同的方式,并仍然遇到ImageList的问题。
在我最后一次尝试进一步探讨这个问题时,我将下面那段仍然表现异常的测试代码放在一起。
private void Form1_Load(object sender, EventArgs e)
{
list = new ImageList();
list.ImageSize = new Size(128, 128);
list.ColorDepth = ColorDepth.Depth32Bit;
Image[] images = new Image[10];
for (int y = 0; y < 10; y++)
{
images[y] = new Bitmap(@"Path to loading_photo.png");
}
for (int x = 0; x < 750; x++)
{
list.Images.AddRange(images);
}
list.Images[12] = new Bitmap(@"Path to another.png");
最后一行崩溃“Image can not be added to ImageList”error。奇怪的是,将第二个循环设置为更低的迭代次数(即,对于总共2000个图像被添加的200),它表现得很好。
在.net中ImageList是否有一定的阈值我不知道?任何帮助将不胜感激。
我在这方面没有任何专业知识,但添加更少图片使一切正常工作似乎并不奇怪。你几乎肯定会遇到内存问题,所以使用更少的内存将是避免这种情况的好方法。您可能需要对应用进行配置,以查看您的内存使用情况。 – dlev 2012-04-16 20:25:40
我也在想,但我有一些演出。另外,将此图像列表设置为列表视图,可以很好地显示所有图像。只是当我试图通过它的索引来访问一张图片时,它会在其他地方显示出现Out of Memory问题。只是奇怪。 – genus 2012-04-16 20:29:32