Сохранить сетку и элементы в ней как изображение в формате 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);
}
Я надеюсь, что это будет полезно для вас.