我正在创建一个Silverlight 4应用程序,它需要在将图像上传到服务器之前显示图像的缩略图。我的代码完全适用于15mb以下的图像但是当我尝试打开大图像(一些超过30mb)时,我得到以下例外:
Insufficient memory to continue the execution of the program.
错误非常自我解释但是我的问题是....是否有另一种方法可以打开大图像或增加Silverlight应用程序可用的内存?
我正在一台带有8GB内存的机器上进行测试,当我检查托管应用程序内存使用率的IE进程在引发异常之前达到250mb左右,因此可以相当安全地假设我的机器内存不足。< / p>
我用来打开完整图像的代码如下,虽然我省略了用于生成调整大小的缩略图的代码,因为它目前从未在大图像中得到那么远:
private BitmapImage OpenImage(Stream stream)
{
byte[] fullRead = this.ReadFully(stream);
MemoryStream ms = new MemoryStream(fullRead);
BitmapImage bi = new BitmapImage();
bi.SetSource(ms);
return bi;
}
private byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[input.Length];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}