将网格和元素保存为jpeg图像 - WinRT

时间:2013-04-10 06:13:41

标签: windows-8 windows-phone-8 windows-phone-7.1 winrt-xaml windows-phone-7.8

我被困在我的应用中。我有一个网格,里面有一些元素。这些元素是按钮,图像和其他控件,如stackpanel和嵌套网格。我想保存用户在点击按钮时显示的图像,但我不知道如何继续这一点。

我可以将网格和按钮等元素写入可写位图吗?或者还有其他方式吗?

简而言之,我想在用户点击按钮时拍摄我的应用程序屏幕的屏幕截图。请帮忙。

4 个答案:

答案 0 :(得分:1)

不幸的是,目前还不可能。正如@FilipSkakun提到in a response here,您可能会根据您的要求获得部分内容。

答案 1 :(得分:1)

这在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();
}

答案 2 :(得分:0)

您可以使用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);
}

我希望它会对你有所帮助。

答案 3 :(得分:0)

在WinRt上无法使用winrt应用程序的“屏幕截图”,或仅使用控件。没有实现,现在他们不打算这样做。