Сохранить сетку и элементы в ней как изображение в формате JPEG - WinRT

Я застрял в моем приложении. У меня есть сетка с некоторыми элементами. Этими элементами являются кнопки, изображения и другие элементы управления, такие как панель стека и вложенные сетки. Я хочу сохранить то, что отображается для пользователя в виде изображения по нажатию кнопки, но я не знаю, как действовать дальше.

Могу ли я записать элементы, такие как сетка и кнопки, на записываемое растровое изображение? Или есть какой-то другой способ?

Короче говоря, я хочу сделать снимок экрана моего приложения, когда пользователь нажимает кнопку. Пожалуйста помоги.

4 ответа

Решение

Делать "скриншоты" приложений WinRT или просто элементов управления на WinRt невозможно. Не реализовано, и сейчас они не планируют это делать.

К сожалению, на данный момент это невозможно. Как упоминает @FilipSkakun в ответе, вы можете пройти часть пути в зависимости от ваших требований.

Это немного изменилось в 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();
}

Вы можете конвертировать любой UIElement в изображение JPEG, используя следующую опцию в Windows Phone 8.

var bitmap = new WriteableBitmap(element,null);

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

Я надеюсь, что это будет полезно для вас.

Другие вопросы по тегам