在Silverlight上从文件夹中读取图片(在浏览器应用程序外)

本文关键字:浏览器 应用程序 取图片 读取 Silverlight 文件夹 | 更新日期: 2023-09-27 18:15:59

为了使用Silverlight应用程序从文件夹中读取图片,我将位图图像的源设置为文件流。请看下面的代码:

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Images", String.Format("{0}.jpg", _imageName));
if (File.Exists(path))
{
    Image = new BitmapImage();
    Image.SetSource(new MemoryStream(File.ReadAllBytes(path)));
}

问题是,图像需要很多时间来显示,当我加载很多图片(>400),我可能会得到一个内存不足的错误。当通过URI加载图片时,我从来没有遇到过这个错误,我想知道是否可以通过路径的URI加载它。我试过的代码:

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Images", String.Format("{0}.jpg", _imageName));
if (File.Exists(path))
{
    Image = new BitmapImage()
                {
                    UriSource = new Uri(path),
                    CreateOptions = BitmapCreateOptions.DelayCreation
                };
}

你有什么提示吗?

谢谢!

菲利普

在Silverlight上从文件夹中读取图片(在浏览器应用程序外)

我猜你是从本地文件系统加载的照片,这些照片的分辨率比你通过URL加载的图像高得多。

你想加载400个,是的,你会耗尽内存。

对于装载时间,你无能为力。您可以通过使用WriteableBitmap来缩小实际的位图,从而减少对内存的压力。

将图像加载到属性中,调整其大小并将该图像设置为预览,然后将图像从文件夹中删除并移动到下一个

简而言之,你应该在那个文件夹中创建图像缩略图并在你的应用中显示它们

你现在所做的就是把所有的图像都保存在你的内存中,所有的大图像,这就是为什么你会出现内存不足的异常

我意识到即使我通过URI加载图片,它也不会加载每个图片。软件在占用1.6g内存时停止加载图片。通过流加载图片的不同之处在于,似乎没有针对内存不足的保护。

因为我没有显示所有的图像(我意识到我有超过8000张图片,当他们正确加载),我只在内存中加载我需要显示的图像。

所以每次我想要一张图片,我就从硬盘上加载它。当图片不再显示时,垃圾收集器将其清除。这样,应用程序的内存始终稳定在300兆左右。