かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

UWPでWin2Dで描いた画像を保存しよう

こんな感じでいけました。

CanvasがCanvasControlの変数になります。

var picker = new FileSavePicker();
picker.FileTypeChoices.Add("png", new List<string> { ".png" });
var file = await picker.PickSaveFileAsync();
if (file == null) { return; }

var size = this.Canvas.RenderSize;
var renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(this.Canvas, (int)size.Width, (int)size.Height);

var displayInformation = DisplayInformation.GetForCurrentView();

using (var s = await file.OpenAsync(FileAccessMode.ReadWrite))
{
    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, s);
    encoder.SetPixelData(
        BitmapPixelFormat.Bgra8,
        BitmapAlphaMode.Ignore,
        (uint)renderTargetBitmap.PixelWidth,
        (uint)renderTargetBitmap.PixelHeight,
        displayInformation.LogicalDpi,
        displayInformation.LogicalDpi,
        (await renderTargetBitmap.GetPixelsAsync()).ToArray());
    await encoder.FlushAsync();
}

参考

stackoverflow.com