将 Win2D CanvasRenderTarget 转换为 BitmapImage?

Converting a Win2D CanvasRenderTarget to a BitmapImage?

我正在尝试编写一个接受我的 ICanvasEffect 作为参数的函数(在我的例子中是 Win2D BlendEffect) ,我想将 CanvasRenderTarget 转换为 BitmapImage 以便我可以在 UWP Image[=22= 中使用它] 控制:

    private async Task<BitmapImage> GetBitmapImage(CancellationToken ct, ICanvasImage effect)
    {
        using (var target = new CanvasRenderTarget(CanvasDevice.GetSharedDevice(), 320f, 240f, 96))
        {
            using (var ds = target.CreateDrawingSession())
            {
                // Draw the image with the supplied ICanvasImage
                ds.DrawImage(effect);
            }

            //await target.SaveAsync(outputStream, CanvasBitmapFileFormat.Jpeg).AsTask(ct);
        }
    }

正如您在注释代码中看到的,CanvasRenderTarget 有一个 SaveAsync 方法,我可以使用它来将它保存到流中,但是如何?

As you see in the commented code, CanvasRenderTarget has a SaveAsync method I can use to save it to a Stream, but how?

如果要保存到流中,可以参考Win2D samples

有很多示例说明如何使用 CanvasRenderTarget.SaveAsync() 方法。

例如,Win2D-Samples/ExampleGallery/Infrastructure/AppIconGenerator.cs#L217

想通了:

    using (var stream = new InMemoryRandomAccessStream())
    {
        await target.SaveAsync(stream, CanvasBitmapFileFormat.Jpeg).AsTask(ct);

        var bmp = new BitmapImage();

        stream.Seek(0);
        await bmp.SetSourceAsync(stream);
    }