【发布时间】:2019-09-04 03:09:32
【问题描述】:
当我尝试这样做时遇到了这个异常:
var pixels = await bitmap.GetPixelsAsync();
byte[] bytes = pixels.ToArray();
它发生在pixels.ToArray()。 here 的信息对我帮助不大。我只知道我的像素的长度和容量为 0,但我不知道为什么以及如何解决这个问题。
这段代码的上下文:
public static async Task<string> SaveThumbnail(UIElement image, bool isCurrent)
{
var bitmap = new RenderTargetBitmap();
try
{
await bitmap.RenderAsync(image);
}
catch (ArgumentException)
{
return "";
}
var pixels = await bitmap.GetPixelsAsync();
byte[] bytes = pixels.ToArray();
// some other code
}
这里调用了这个函数:
public static async Task<Brush> GetThumbnailMainColor(UIElement image, bool isCurrent)
{
var filename = await SaveThumbnail(image, isCurrent);
var file = await ThumbnailFolder.GetFileAsync(filename);
return await ColorHelper.GetThumbnailMainColor(file);
}
它在这里被调用:
thumbnail.Source = thumbnails.Count == 0 ? Helper.DefaultAlbumCover : thumbnails[random.Next(thumbnails.Count)];
grid.Background = await Helper.GetThumbnailMainColor(thumbnail, false);
我在通话之前设置了Image 源,我很确定我可以看到缩略图中显示的图像。那么为什么我会得到 0-Capacity 像素呢?
【问题讨论】:
-
会不会是因为你在
try块中调用了RenderAsync? (可能是范围限制?)。根据文档,RenderAsync 不应该抛出异常,因此您可以删除您的 try 块。 -
@Antoine 我也不知道为什么它有时会给我一个
ArgumentException,所以我必须保留它。我猜该图像正在其他地方使用并且无法使用,这可能会导致该异常。
标签: c# uwp bitmap win-universal-app rendertargetbitmap