保存网格和它的元素作为JPEG图像 - 的WinRT(Save a Grid and element

2019-10-17 23:31发布

我被困在我的应用程序。 我有它的一些元素的网格。 这些元素是按钮,图像和类似的StackPanel和嵌套网格其他控件。 我要救什么呈现给用户作为一个按钮的点击图像,但我不知道如何在此进行。

我可以编写电网和按钮元素到可写的位图? 或者是有一些其他的方式?

总之我希望当用户点击该按钮把我的应用程序屏幕的截屏。 请帮忙。

Answer 1:

以“屏幕截图”的WinRT应用程序,或者只是控制是不可能的WinRT的。 未实现,而现在他们不这样做的计划。



Answer 2:

不幸的是,这是不可能的,在这一点上。 作为@FilipSkakun提到在响应这里 ,你也许能够得到的根据您的要求的方式的一部分。



Answer 3:

这已在Windows 8.1改变了一下,可使用RenderTargetBitmap来完成。 RenderTargetBitmap.RenderAsync(的UIElement)将让你得到的像素的任何元素,包括一个页面。

这里有一个例子,将一个PNG保存到文件中使用FileSavePicker指定。

var filePicker = new FileSavePicker();
var file = await filePicker.PickSaveFileAsync();
var renderTargetBitmap = new RenderTargetBitmap();

using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
    await renderTargetBitmap.RenderAsync(this);
    var pixelBuffer = await renderTargetBitmap.GetPixelsAsync();
    var pixelBytes = pixelBuffer.ToArray();

    encoder.SetPixelData(
        BitmapPixelFormat.Bgra8, 
        BitmapAlphaMode.Ignore, 
        (uint)renderTargetBitmap.PixelWidth, 
        (uint)renderTargetBitmap.PixelHeight, 
        96.0, 
        96.0, 
        pixelBytes);

    await encoder.FlushAsync();
}


Answer 4:

您可以使用Windows Phone 8的下列选项转换任何的UIElement为JPEG图像。

var bitmap = new WriteableBitmap(element,null);

using (MemoryStream s = new MemoryStream())
{
     bitmap.SaveJpeg(s, (int)ContentPanel.Width, (int)ContentPanel.Height, 0, 100);
}

我希望这将是对你有所帮助。



文章来源: Save a Grid and elements in it as a jpeg image - WinRT