在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
};
}
你有什么提示吗?
谢谢!
菲利普
我猜你是从本地文件系统加载的照片,这些照片的分辨率比你通过URL加载的图像高得多。
你想加载400个,是的,你会耗尽内存。
对于装载时间,你无能为力。您可以通过使用WriteableBitmap
来缩小实际的位图,从而减少对内存的压力。
将图像加载到属性中,调整其大小并将该图像设置为预览,然后将图像从文件夹中删除并移动到下一个
简而言之,你应该在那个文件夹中创建图像缩略图并在你的应用中显示它们
你现在所做的就是把所有的图像都保存在你的内存中,所有的大图像,这就是为什么你会出现内存不足的异常
我意识到即使我通过URI加载图片,它也不会加载每个图片。软件在占用1.6g内存时停止加载图片。通过流加载图片的不同之处在于,似乎没有针对内存不足的保护。
因为我没有显示所有的图像(我意识到我有超过8000张图片,当他们正确加载),我只在内存中加载我需要显示的图像。
所以每次我想要一张图片,我就从硬盘上加载它。当图片不再显示时,垃圾收集器将其清除。这样,应用程序的内存始终稳定在300兆左右。