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

C# 从Silverlight上的文件夹中读取图片(浏览器外应用程序),c#,silverlight,file,out-of-browser,C#,Silverlight,File,Out Of Browser,为了使用Silverlight应用程序从文件夹中读取图片,我使用文件流设置位图图像的源。请参阅下面的代码: string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Images", String.Format("{0}.jpg", _imageName)); if (File.Exists(path)) { Image = new BitmapImage()

为了使用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
                };
}
你有什么提示要提供吗

谢谢大家!


Philippe

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

你想加载400个,是的,你的内存会用完


关于装载时间,你无能为力。您可以使用
WriteableBitmap
缩小实际位图的比例,以减少内存压力。

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

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


你现在要做的是把所有的图片都保存在你的内存中,所有的大图片,也就是说,这就是为什么你会出现内存异常。

我意识到,即使我通过URI加载图片,也不会加载所有图片。软件在获取1.6G内存(6G内存中的1.6G内存)时停止加载图片。通过流加载图片的区别在于,似乎没有防止内存不足的保护措施

由于我没有显示所有的图像(当它们被正确加载时,我意识到我有超过8000张图片),我只在内存中加载我需要显示的图像


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

“我尝试的代码…”-那么什么不起作用了?确切地说,我发现打开硬盘上图片的唯一方法是使用流。我从硬盘加载的图像与从Internet加载的图像完全相同。这些是备份映像,以防internet宕机。。。从internet加载图片时,图片仅在显示时加载(因为选项BitmapCreateOptions.DelayCreation),这使软件运行平稳。当从流中加载时,每个照片都同时加载(而不是在显示图像时),这会造成很多空照片。。。你知道一种方法来延迟图片的创建,即使图片来自流吗?