将 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);
}
我正在尝试编写一个接受我的 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);
}