2013-08-21 125 views
0

我正在使用Silverlight。我在內存中加載了很多圖像(大約10000),這會導致內存異常。所以我需要通過大小,分辨率和重新採樣圖像來降低圖像質量。請檢查我的代碼如下。降低圖像質量

for(int i=0;i<10000;i++) 
{ 
    Image img = new Image() { Height = height, Width = width }; 
    img.Source = writableBimapimg; // returns WriteableBitmap 
    container.Children.Add(img);// throws memory exception 
} 

如何降低圖像質量?

感謝

+0

你真的需要一次所有的圖像嗎?我會創建每個圖像的縮略圖以在我的應用程序中顯示它。縮略圖我會與原始圖像一起存儲。 – Jehof

+0

yes.i需要將它們全部加載一次。我需要減小原始圖像本身的大小 – sharmila

回答

1

首先,如果你申請一個過濾器,圖像,否則你得到的鬆散的質量和/或信息(我已經通過這個前)圖像,你只能減少圖像尺寸。

不幸的是Silverlight不是一個很好的平臺,因爲它不支持任何類型的雙線性,三線性或最近鄰過濾。

爲了使用Nearest Neighbor過濾器縮小圖像大小,您可以添加ImageTools庫(由Sebastian Stehle創建)可用的here或作爲Nuget包。

調整圖像大小的代碼可以是這樣的(使用ImageTools)。

var extendedImage = writableBimapimg.ToImage(); //This is an extension from ImageTools. Make sure you have the "using ImageTools" in the namespaces; 
    var resizedImage = ExtendedImage.Resize(extendedImage, width, height, new ImageTools.Filtering.NearestNeighborResizer()); 
    container.Children.Add(resizedImage.ToBitmap()); 

現在爲了處理這些內存問題,您需要仔細選擇調整大小的圖像的大小。

得到一個計算器,並找出你可以加載多少圖像,考慮到使用2 GB的RAM(至少用於silverlight 4)後進程崩潰。

每個像素具有32位和100x100像素的調整大小的圖像,您可以將數千個圖像加載到內存中,而不會出現任何問題。

希望它有幫助。

相關問題