Tag: 帧率

如何在WPF中创建渲染循环?

如何在WPF中消息循环空闲时创建一个连续执行的循环? 这里的目标是执行一些长时间运行的图形更新,例如刷新PicktureBox ,它能够消耗任何可用的免费资源,但不应该冻结UI或以其他方式优先于消息队列中的任何其他操作。 我注意到这篇博客文章提供了在winforms应用程序中执行此操作的代码,但我不知道如何将其转换为WPF应用程序。 下面是我根据另一篇文章制作的WinForms渲染循环类的代码: using System; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; namespace Utilities.UI { /// /// WinFormsAppIdleHandler implements a WinForms Render Loop (max FPS possible). /// Reference: http://blogs.msdn.com/b/tmiller/archive/2005/05/05/415008.aspx /// public sealed class WinFormsAppIdleHandler { private readonly object _completedEventLock = new object(); private event EventHandler _applicationLoopDoWork; //PRIVATE Constructor private WinFormsAppIdleHandler() { Enabled = false; […]

快速video显示WPF

我正在开发一个WPF应用程序,需要以快速帧速率显示多个video流(我们希望30 fps)。 video流是1920×1080原始(RGB24)帧(它们存储在System.Drawing.Bitmap中)。 有没有人对如何实现这一点有任何想法? 更多细节: 我们之前的尝试使用了标准的WPF图像控件,改变了每帧的源。 这适用于单个流,但现在我们必须渲染多个流,它正在放慢速度。 我们还尝试使用Direct2D来处理绘图,使用D3D9共享曲面作为Image控件的源。 虽然这个速度更快,但我们仍然无法从中获得稳定的30fps(当事情恢复时它会在24-32 fps之间跳跃)。 video流在后台线程中进入,然后被封送(使用窗口的Dispatcher)到适当的UI线程进行绘制。 然后在UI线程上完成所有绘图。 我们还尝试为每个窗口提供自己的线程。 如果有人想看,我可以提供我们尝试过的代码示例。 谢谢!