1

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

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

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

ответ

0

Принимать «скриншоты» приложений winrt или просто контролировать невозможно в WinRt. Не реализованы, и сейчас они не планируют это делать.

1

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

0

Вы можете конвертировать любой 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); 
} 

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

+0

Вы уверены, что? –

+0

Несомненно, он будет работать на Windows Phone 8 .. Вы можете проверить и сообщить мне, если у вас все еще есть проблемы с этим. –

+0

Ну, я думаю, вы должны протестировать на WinRT. –

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