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

UWP The specified buffer index is not within the buffer capacity

我在尝试执行此操作时遇到此异常:

        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控件吗?),图片还没有渲染到界面上,导致你获取不到图片在 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);
}

此致。