将Win2D CanvasRenderTarget转换为BitmapImage?

时间:2018-09-07 17:05:01

标签: c# uwp win2d

我正在尝试编写一个函数,该函数接受我的 ICanvasEffect 作为参数(在我的情况下是Win2D BlendEffect ),我想转换< strong> CanvasRenderTarget 到 BitmapImage ,这样我就可以在UWP Image 控件中使用它:

    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 方法,我可以使用该方法将其保存到Stream中,但是如何?

2 个答案:

答案 0 :(得分:1)

想通了:

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

        var bmp = new BitmapImage();

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

答案 1 :(得分:0)

  

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

如果要将其保存为流,可以参考Win2D samples

有许多示例显示了如何使用CanvasRenderTarget.SaveAsync()方法。

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