読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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

UWP

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

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