代码之家  ›  专栏  ›  技术社区  ›  SuperJMN

使用合成从UWP中的UI控件创建视频

  •  0
  • SuperJMN  · 技术社区  · 6 年前

    请在这里观看:

    https://youtu.be/eAOjImJci3M

    但这并不能编辑视频,它只是在应用程序上。

    MediaClip 从中解脱出来?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Muzib hardyVeles    6 年前

    简短的回答

    冗长的回答 :将要录制的UI命名为 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 我早些时候宣布 file 是一个 StorageFile 带mp4扩展。

    此过程不需要将每个屏幕截图保存到磁盘。

    CanvasRenderTarget this 问题。

    希望有帮助。