gpt4 book ai didi

c# - 如何以高效的方式从 RenderTargetBitmap 创建媒体剪辑?

转载 作者:太空狗 更新时间:2023-10-29 19:43:32 30 4
gpt4 key购买 nike

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

我的方法。

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

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

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

4.使用 MediaClip.CreateFromImageFileAsync 从该图像创建 MediaClip

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

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

现在这种方法奏效了。

但是正如您所想象的,去磁盘保存图像,然后读取它们来创建剪辑,它的速度很慢,而且帧率很低。

我正在寻找可以避免每个屏幕截图转到磁盘的东西。将 RenderTargetBitmap(或 IBufferbyte[])转换为 MediaClip,而无需转到磁盘,或一些不同的方法来保存视频。

我正在为 Hololens 开发 UWP 应用

最佳答案

尝试这样的事情:

和你一样。

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

记得捕捉设备丢失异常并创建新设备

关于c# - 如何以高效的方式从 RenderTargetBitmap 创建媒体剪辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951307/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com