如何有效地从 RenderTargetBitmap 创建媒体剪辑?

2023-11-25

我正在尝试使用 C# 捕获 UWP 应用程序中 XAML 网格的视频。

我的方法。

1.使用RenderTargetBitmap进行截图renderTargetBitmap.RenderAsync

2.将数据转换为字节数组。

3.使用字节创建图像文件并将其保存在磁盘上BitmapEncoder

4.使用该图像创建 MediaClipMediaClip.CreateFromImageFileAsync

5.将剪辑添加到 MediaCompositioncomposition.Clips.Add(clip)

6.使用保存为视频composition.RenderToFileAsync(video);

现在这个方法有效了。

但正如你可以想象的那样,去磁盘保存图像,然后读取它们来创建剪辑,其速度慢且帧速率低。

我正在寻找一些可以避免每个屏幕截图都进入磁盘的东西。 转换的东西RenderTargetBitmap (or IBuffer or byte[]) to MediaClips,无需访问磁盘,或使用其他方法来保存视频。

我正在开发UWP app for Hololens.


尝试这样的事情:

和你做的一样。

using (var soft = SoftwareBitmap.CreateCopyFromBuffer(pixels, BitmapPixelFormat.Bgra8, renderTargetBitmap.PixelWidth, renderTargetBitmap.PixelHeight, BitmapAlphaMode.Premultiplied))
{
   CanvasBitmap canvas = CanvasBitmap.CreateFromSoftwareBitmap(CanvasDevice.GetSharedDevice(), soft); 

   MediaClip m = MediaClip.CreateFromSurface(canvas, DateTime.Now - previousFrame); 
   composition.Clips.Add(m); 
}

记得捕获设备丢失异常并创建一个新设备

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何有效地从 RenderTargetBitmap 创建媒体剪辑? 的相关文章

随机推荐