当我尝试这样做时,我遇到了这个异常:
var pixels = await bitmap.GetPixelsAsync();
byte[] bytes = pixels.ToArray();
它发生在pixels.ToArray()
.这里的信息对我没有太大帮助。我只知道像素的长度和容量为 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 容量像素呢?
也许你在设置缩略图的来源后渲染RenderTargetBitmap
太快了(是图像控制吗?(,并且图像尚未在界面上渲染,这将导致您无法在Image
内获取图像。
试试这个:
thumbnail.Source = thumbnails.Count == 0 ? Helper.DefaultAlbumCover : thumbnails[random.Next(thumbnails.Count)];
thumbnail.Loaded += async (_s,_e) =>
{
grid.Background = await Helper.GetThumbnailMainColor(thumbnail, false);
}
此致敬意。