我正在尝试编写一个函数,它接受我的ICanvasEffect作为参数(在我的例子中,它是一个Win2D BlendEffect),并且我想将它转换为BitmapImage,以便在UWP 图像控件中使用它:
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方法,我可以使用它将其保存到一个流中,但是如何保存呢?
发布于 2018-09-16 03:54:09
弄明白了:
using (var stream = new InMemoryRandomAccessStream())
{
await target.SaveAsync(stream, CanvasBitmapFileFormat.Jpeg).AsTask(ct);
var bmp = new BitmapImage();
stream.Seek(0);
await bmp.SetSourceAsync(stream);
}发布于 2018-09-10 03:08:23
正如您在注释的代码中所看到的,CanvasRenderTarget有一个SaveAsync方法,我可以使用它将其保存到一个流中,但是如何保存呢?
如果要将其保存到流中,可以参考Win2D样本。
有许多示例说明了如何使用CanvasRenderTarget.SaveAsync()方法。
例如,Win2D-Samples/ExampleGallery/Infrastructure/AppIconGenerator.cs#L217
https://stackoverflow.com/questions/52226884
复制相似问题