[英]WinRT GridView crashes
當顯示多於13個 (12個或更少的顯示效果很好)時,大圖像(3264x2448)會縮小為320x180個圖像項-GridView崩潰,出現非托管異常:未處理的異常位於0x7583A862(combase.dll)。
XAML:
<GridView x:Name="ImagesGridView" HorizontalAlignment="Stretch" Height="Auto" VerticalAlignment="Stretch" Width="Auto">
<GridView.ItemTemplate>
<DataTemplate>
<Image Stretch="Fill" Source="{Binding Source}" Height="180" Width="320" />
</DataTemplate>
</GridView.ItemTemplate>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Orientation="Horizontal" />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>
加載代碼:
private static async Task<BitmapImage> LoadImage(StorageFile file)
{
var bitmapImage = new BitmapImage();
var stream = (FileRandomAccessStream)await file.OpenAsync(FileAccessMode.Read);
bitmapImage.SetSource(stream);
stream.CloneStream();
return bitmapImage;
}
public async void GetPictures()
{
var queryOptions = new QueryOptions(CommonFileQuery.OrderByName, new[] { ".png", ".jpg" });
var picturesQuery = await KnownFolders.PicturesLibrary.CreateFileQueryWithOptions(queryOptions).GetFilesAsync();
foreach (var pictureFile in picturesQuery)
{
var bitmap = await LoadImage(pictureFile);
var img = new Image { Source = bitmap };
ImagesGridView.Items.Add(img);
}
}
崩潰不會發生在加載圖像上,而是在所有加載成功之后,應用程序應該在GridView中顯示圖像。 另外,我使用的是同一張圖片的副本,以確保所有圖片都相同。
對我來說,在應用程序中加載大圖像似乎很常見,所以也許我在這里做錯了什么?
當您的圖片控件僅為320x180時,您正在以全分辨率加載圖片,因此您嘗試將3264x2448x4(每像素字節)x13 =〜400MB的紋理饋送到視頻卡中,這可能有點麻煩。
嘗試使用StorageFile.GetThumbnailAsync()
加載圖像,例如。
private static async Task<BitmapImage> LoadImageAsync(StorageFile pictureFile)
{
using (var stream = await pictureFile.GetThumbnailAsync(
ThumbnailMode.SingleItem,
320,
ThumbnailOptions.ResizeThumbnail))
{
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(stream);
return bitmap;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.