C# 快速显示位图

C# 快速显示位图,c#,wpf,bitmap,C#,Wpf,Bitmap,我有一个WPF应用程序,我需要添加一个功能,可以非常快速地显示一系列全屏位图。在大多数情况下,它将只有两个图像,基本上切换这两个图像。它们的显示速率应该是恒定的,大约每幅图像10-20毫秒。我尝试在WPF中使用计时器直接执行此操作,但显示速率似乎有点不同。我还尝试过使用SharpGL(OpenGL上的.Net包装器),但在使用大型图像时速度非常慢(我可能没有做到最好)。在编译之前,我会预先准备好所有的位图,所以只要像素没有改变,格式就可以改变 最好的方法是什么 我已经落后于计划,所以我没有时间学

我有一个WPF应用程序,我需要添加一个功能,可以非常快速地显示一系列全屏位图。在大多数情况下,它将只有两个图像,基本上切换这两个图像。它们的显示速率应该是恒定的,大约每幅图像10-20毫秒。我尝试在WPF中使用计时器直接执行此操作,但显示速率似乎有点不同。我还尝试过使用SharpGL(OpenGL上的.Net包装器),但在使用大型图像时速度非常慢(我可能没有做到最好)。在编译之前,我会预先准备好所有的位图,所以只要像素没有改变,格式就可以改变

最好的方法是什么

我已经落后于计划,所以我没有时间学习很多API或尝试很多选项。

我尝试使用计时器直接在WPF中执行此操作,但显示速率似乎有点不同。

使用Thread.Sleep(20)代替计时器,因为它不会占用那么多系统资源。这应该会给你一个立即的改善

这听起来好像在图像快速切换时用户将与应用程序进行交互,在本例中,将切换图像的代码放在后台线程中。但请记住,UI不是线程安全的

这些只是快速的胜利,但您可能需要使用DirectX来绕过HAL:

Windows的硬件抽象层(HAL)在中实现 Hal.dll。HAL实现了许多如下功能: 通过不同的硬件平台以不同的方式实现 在此上下文中,主要指芯片组。系统中的其他组件 然后,操作系统可以以相同的方式在所有计算机上调用这些函数 平台,而不考虑实际实施

“我尝试使用计时器直接在WPF中执行此操作,但显示速率似乎有点不同。”

使用Thread.Sleep(20)代替计时器,因为它不会占用那么多系统资源。这应该会给你一个立即的改善

这听起来好像在图像快速切换时用户将与应用程序进行交互,在本例中,将切换图像的代码放在后台线程中。但请记住,UI不是线程安全的

这些只是快速的胜利,但您可能需要使用DirectX来绕过HAL:

Windows的硬件抽象层(HAL)在中实现 Hal.dll。HAL实现了许多如下功能: 通过不同的硬件平台以不同的方式实现 在此上下文中,主要指芯片组。系统中的其他组件 然后,操作系统可以以相同的方式在所有计算机上调用这些函数 平台,而不考虑实际实施


您的程序占用了系统还是其他程序正在运行?您需要将它们存储在内存中,因为从磁盘加载它们会阻止这种速度,这合理吗?James,这将是系统上运行的唯一应用程序,因此我不需要担心占用资源。您的程序占用了系统还是其他程序正在运行?您需要将它们存储在内存中,因为从磁盘加载它们会阻止这种速度,这合理吗?James,这将是系统上运行的唯一应用程序,因此我不需要担心占用资源。使用高分辨率计时器也会有帮助:使用高分辨率计时器也会有帮助: