Краткий ответ : сделать снимок экрана пользовательского интерфейса с определенным интервалом, а затем накопить его для создания видео:
длинный ответ : назовем имяПользовательский интерфейс, который вы хотите записать как myGrid
, чтобы получить снимки экрана с интервалом, вы можете использовать DispatcerTimer
и обрабатывать событие Tick
следующим образом:
private async void Tm_Tick(object sender, object e)
{
RenderTargetBitmap rendertargetBitmap = new RenderTargetBitmap();
await rendertargetBitmap.RenderAsync(myGrid);
var bfr = await rendertargetBitmap.GetPixelsAsync();
CanvasRenderTarget rendertarget = null
using (CanvasBitmap canvas = CanvasBitmap.CreateFromBytes(CanvasDevice.GetSharedDevice(), bfr, rendertargetBitmap.PixelWidth, rendertargetBitmap.PixelHeight, Windows.Graphics.DirectX.DirectXPixelFormat.B8G8R8A8UIntNormalized))
{
rendertarget = new CanvasRenderTarget(CanvasDevice.GetSharedDevice(), canvas.SizeInPixels.Width, canvas.SizeInPixels.Height, 96);
using (CanvasDrawingSession ds = rendertarget.CreateDrawingSession())
{
ds.Clear(Colors.Black);
ds.DrawImage(canvas);
}
}
MediaClip m = MediaClip.CreateFromSurface(rendertarget, TimeSpan.FromMilliseconds(80));
mc.Clips.Add(m);
}
mc
- это MediaComposition
объект, который я объявил ранее.
Когда вы закончите запись, остановите DispatcherTimer
и сохраните видео на диск следующим образом:
tm.Stop();
await mc.RenderToFileAsync(file, MediaTrimmingPreference.Precise, MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Vga));
tm
- это DispatcherTimer
Я объявил ранее, и file
- это StorageFile
с расширением mp4.
Эта процедура не требует сохранения каждого снимка экрана на диск.
Если выИнтересно, почему я использовал дополнительный CanvasRenderTarget
, это из-за этой проблемы.
Надеюсь, что поможет.