应用程序无法可视化超过600个图像

本文关键字:600个 图像 可视化 应用程序 | 更新日期: 2023-09-27 18:18:20

我编写了一个WPF应用程序,它应该在大量图像(600+,平均大小为190Kb)之间(快速)交换,但我发现一些困难。

    private int appendImages(Canvas c, int start, int end)
    {
        int tot = 0;
        for (int i = start; i < end; i++)
        {
            BitmapImage bi = new BitmapImage();
            bi.BeginInit();
            //bi.CacheOption = BitmapCacheOption.OnLoad;
            bi.UriSource = new Uri(appFolder+@"/"+imgFolder+"/"+filename(i)+".jpg");
            bi.EndInit();
            Image img = new Image
            {
                Width = imgWidth,
                Height = imgHeight,
                Source = bi,
                Name = name(i),
                Visibility = i == startImg ? Visibility.Visible : Visibility.Hidden
            };
            c.Children.Add(img);
            tot++;
        }
   }

显然初始化是好的,但如果我尝试像这样交换图像:

    private void changeImageTo(int n)
    {
        Image img = findImage(n);
        Image old = findImage(prevImg);
        if (img != null)
        {
            img.Visibility = Visibility.Visible;
            if (old != null && old != img)
                old.Visibility = Visibility.Hidden;
            prevImg = n;
        }
    }

. .然后应用程序显示前200/300图像(取决于我使用的来源),而其他只是空/空白(我可以看到下面的画布)。

我怀疑这是内存问题,但我不确定是什么原因导致的。

顺便说一下,如果我取消注释行(BitmapCacheOption.OnLoad),有时我会在启动应用程序时得到一个vshost错误。

任何帮助将非常感激,因为我找不到任何有用的浏览。提前感谢!

应用程序无法可视化超过600个图像

看起来你是一次加载所有的图像,并把它们放入WinForms/WPF控件。对于这么多图片来说,这是一个非常糟糕的主意,因为即使没有显示,每个图片也会占用资源。

粗略的计算,假设640x480的图像,24bpp是原生GDI+格式,显示一次加载所有图像需要2gb多一点,当然,这将随着图像大小呈指数级增长。

我要做的是,只有一个图像。将实际的图像加载代码移动到changeImageTo函数中,根据n构建文件名,并将加载的图像设置为此处的image。