2012-01-29 75 views
1

我已經使用WritebleBitmap類將位圖輕鬆地添加到位圖,然後嘗試使用位圖通過SaveFileDilogue將圖像保存在客戶機系統上。我正在使用FluxJpegCore圖像編碼方法,我們使用光柵陣列以像素方式生成圖像。 下面是做這項工作的部分代碼。打印Canvas圖像silverlight

 byte[][,] raster = new byte[bands][,]; 

     for (int i = 0; i < bands; i++) 
     { 
      raster[i] = new byte[width, height]; 
     } 

     for (int row = 0; row < height; row++) 
     { 
      for (int column = 0; column < width; column++) 
      { 
       int pixel = bitmap.Pixels[width * row + column]; 
       raster[0][column, row] = (byte)(pixel >> 16); 
       raster[1][column, row] = (byte)(pixel >> 8); 
       raster[2][column, row] = (byte)pixel; 
      } 
     }  

所有進入細跟圖像保存,然而,當我縮放圖像並打印,所述代碼在線路發生故障時「光柵[I] =新的字節[寬度,高度];」。系統內存不足錯誤被提出。任何人都可以幫助我找到解決方案嗎?

+0

當它失敗什麼是寬度和高度值? – AnthonyWJones 2012-01-29 15:38:08

+0

值是寬度=「3687」和高度=「44278」 – 2012-01-30 10:12:45

回答

0

與@AnthonyWJones一起我很確定寬度或高度是類似double.NAN。確保你放置一張支票,看看寬度和高度是一個實數。此外,請檢查您的陣列在Silverlight中的可能性並不是很高。

+0

不,他們不是南在任何情況下 – 2012-01-30 10:14:30

2

我不確定是否有解決方案。你有3個數組,每個數組需要一個連續的163MB的內存塊。問題在於該進程沒有3個可用的地址塊。請注意,bitmap.Pixels將是一個653MB的數組。

你的唯一希望(S)將

  1. 使用應用程序OOB,希望VM碎片將被限制,並允許這種分配非常大的陣列。
  2. 如果FluxJpegCore可以使用Stream,而不是一個字節數組,這樣做effeciently(仍然有很多工作,爲你在那裏做)
  3. 拉昇的Silverlight 5以及託管應用程序在64位瀏覽器實例。
+0

嗨安東尼。謝謝您的幫助!是否有任何其他替代方法可用於打印大圖像?我有滾動查看器上的大圖像內容。我將它轉換爲stackpanel,然後從相同的位置生成writeablebitmap。有些時候這個過程只會給出內存不足的錯誤。 – 2012-01-30 20:59:58