2014-03-19 30 views
-1

我想通過用戶顯示所選擇的圖像的列表:出存儲器異常的選擇圖像後

void photoChooserTask_Completed(object sender, PhotoResult e) 
{ 
    if (e.TaskResult == TaskResult.OK) 
    { 
     var fileName = e.OriginalFileName; 
     var photoStream = e.ChosenPhoto; 
    } 
} 

<Image Source="{Binding PhotoStream}" Width="200" Height="200"/> 

問題是選擇4倍或5的圖像之後,應用匹配存儲器限制和退出。我只想顯示那些所選圖像的縮略圖,例如PhotoHub,如何在不消耗大量內存的情況下做到這一點?謝謝

+0

您的問題非常廣泛。可能有幾種方法可以消耗更少的內存。而是發佈代碼獲取異常的代碼,或複製錯誤 – BossRoss

+0

的示例應用程序您真的在使用Windows Phone 7嗎?如果是這樣,你爲什麼要標記它8?請不要濫用Windows手機標記 –

+0

@ AMR更新。 (不能有人爲這兩個應用程序?!) – user3293835

回答

1

正如在評論中提到的有幾種方法可以解決它,正如你所提到的,你可能會需要一個縮略圖。這裏有一些方法,我能想到的,現在它可能會解決你的記憶問題:

方法1:使用MediaLibrary找到相同的圖像

首先,你會得到一個流的縮略圖版本,像這樣:

void task_Completed(object sender, Microsoft.Phone.Tasks.PhotoResult e) 
{ 
    if (e.TaskResult == Microsoft.Phone.Tasks.TaskResult.OK) 
    { 
     MediaLibrary library = new MediaLibrary(); 
     Picture pic = library.Pictures.Where(p => e.OriginalFileName.EndsWith("\\" + p.Album.Name + "\\" + p.Name)).FirstOrDefault(); 
     Stream thumbnailStream = pic.GetThumbnail(); // Stream to a thumbnail 
    } 
} 

對於這個工作,你還需要在WMAppManifest.xml到支持的能力ID_CAP_MEDIALIB_PHOTO或你不會得到任何結果。

方法2:

第二個選擇是使用例如WriteableBitmapEx library創建縮略圖自己的東西沿着線:

void task_Completed(object sender, Microsoft.Phone.Tasks.PhotoResult e) 
{ 
    if (e.TaskResult == Microsoft.Phone.Tasks.TaskResult.OK) 
    { 
     BitmapImage source = new BitmapImage(); 
     source.SetSource(e.ChosenPhoto); 
     WriteableBitmap bitmap = new WriteableBitmap(source); 
     WriteableBitmap thumbnail = bitmap.Resize(100, 100, WriteableBitmapExtensions.Interpolation.Bilinear); // Creates a 100x100 thumbnail 
    } 
} 

其他方法:

另一種解決方案可能是使用Nokia Imaging SDK,根據文檔支持部分JPEG decodi NG(我還沒有使用此SDK自己,所以不能給你任何示例代碼,現在雖然):

使用RAJPEG技術,獲得的圖像數據,而不用極快預覽解碼整體 JPEG圖像,應用程序的效果, 旋轉和高分辨率圖像的裁剪。

+0

大@JohanFalk – user3293835