C# 如何获取应用程序屏幕截图

C# 如何获取应用程序屏幕截图,c#,uwp,C#,Uwp,在SL应用程序中,我可以使用: var bitmap = new WriteableBitmap(uiElementForViewControl, new TranslateTransform()); 但是在UWP中,我如何做同样的事情呢?使用控件。DrawToBitmap可以捕获一个表单,这就是您正在寻找的“应用程序”。使用RenderTargetBitmap来呈现UIElement(例如您的页面),类似于您的代码段使用WriteableBitmap的方式,然后使用位图编码器将RenderT

在SL应用程序中,我可以使用:

var bitmap = new WriteableBitmap(uiElementForViewControl, new TranslateTransform());

但是在UWP中,我如何做同样的事情呢?

使用
控件。DrawToBitmap
可以捕获一个表单,这就是您正在寻找的“应用程序”。

使用RenderTargetBitmap来呈现UIElement(例如您的页面),类似于您的代码段使用WriteableBitmap的方式,然后使用位图编码器将RenderTargetBitmap的像素编码为jpg或png以保存


你看,这真是不幸。我自己相信很多年前它曾在Windows窗体应用程序上使用过一次。我在谷歌上搜索了这个函数,我发现它并不是万能的,而且有很多方法。然而,我不会发布它们,因为Rob有一个很好的答案帮助了OP。
    private async Task SaveVisualElementToFile(FrameworkElement element, StorageFile file)
    {
        var renderTargetBitmap = new RenderTargetBitmap();
        await renderTargetBitmap.RenderAsync(element);
        var pixels = await renderTargetBitmap.GetPixelsAsync();

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