我正在尝试编写一个函数,该函数接受我的 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中,但是如何?
答案 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