0
我正在創建需要在將圖像上傳到服務器之前顯示圖像縮略圖的Silverlight 4應用程序。代碼中,我有完全適用於下15MB的圖像,但是當我嘗試打開大圖像(一些超過30MB)我得到以下異常:使用BitmapImage.SetSource打開大圖像 - 內存不足異常
Insufficient memory to continue the execution of the program.
錯誤的道理不言而喻但是我的問題是....是否有另一種方式來打開大圖像或增加可用於Silverlight應用程序的內存?
我在一臺有8GB內存的機器上測試這個,當我在檢查IE進程託管應用程序內存使用率峯值在250MB之前拋出異常,所以它相當安全地假設我的機器沒有用完內存。
我使用,從而打開整個圖像的代碼如下:雖然我已經省略了代碼生成調整大小的縮略圖,因爲它目前從來沒有得到那麼遠的大圖片:
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();
}
}
@Yehia源代碼等問題 - 感謝您的鏈接,但我的代碼來調整縮略圖實際上是基於這樣很職務。然而,我的問題是我無法打開原始圖像,以調整它的大小。 – MarkB29
@ MarkB29如果你甚至無法打開原始圖像,那麼我懷疑silverlight沒有設置爲使用所有可用的內存......沒有什麼可以從你的代碼AFAIK解決,因爲這是安全敏感的...也有差異瀏覽器內和瀏覽器外的Silverlight應用程序之間... – Yahia