UWP 指定的缓冲区索引不在缓冲区容量内



当我尝试这样做时,我遇到了这个异常:

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);
}

此致敬意。

最新更新