C#中的Gif动画文件具有比它们应有的更低的帧速率

Nik*_*las 3 c# performance frame-rate gif

我的软件完成运行后,我有一个全屏加载页面,其中包括一个preloader gif文件....这就像一个Windows 8用于商店和地铁.

但问题是,无论gif文件的fps和速度是多少,C#窗体都将显示相同的低fps.

我真的不知道该怎么做,因为我试图在互联网上寻找解决方案,但无论我遇到什么都不清楚或无关.

我怀疑编译器忽略了我导入的gif文件中集成的fps.但我不知道如何将fps设置为文件的内容,或者让IDE/Compiler忽略其对该文件的规则.请指教<3

这里是文件属性的链接我使用 http://preloaders.net/en/search/windows%208 从顶行中间的一个...它有75帧,其余的是原样.. .

我目前正在使用图片框控件将gif包含在我的项目中(在winform项目中)

Han*_*ant 10

这是正常的事故,GIF以10毫秒为单位指定帧的显示时间.但是,默认情况下,Windows上的计时器对于低时间间隔不够准确.定时器由系统时钟中断更新,默认情况下每秒定时64次.为定时器提供不超过15.625毫秒的准确度.实际上,你的GIF将以2/3速度播放,给予或接受.

您可以通过启动其他程序(如Windows Media Player或Firefox或Chrome等浏览器)来更改结果.你会突然看到你的GIF以设计速度播放.

你必须做这些程序做同样的事情,改变时钟中断率以获得一致的回放速度.你需要对timeBeginPeriod进行pinvoke ,传递10以将定时器精度提高到10毫秒.如果您的UI线程没有响应并且启动计时器太晚,您可能需要降低.当您不再需要播放时,请务必再次调用timeEndPeriod(),通常在FormClosed事件处理程序中.

Boilerplate代码:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        timeBeginPeriod(timerAccuracy);
    }

    protected override void OnFormClosed(FormClosedEventArgs e) {
        timeEndPeriod(timerAccuracy);
        base.OnFormClosed(e);
    }

    // Pinvoke:
    private const int timerAccuracy = 10;
    [System.Runtime.InteropServices.DllImport("winmm.dll")]
    private static extern int timeBeginPeriod(int msec);
    [System.Runtime.InteropServices.DllImport("winmm.dll")]
    public static extern int timeEndPeriod(int msec);
}
Run Code Online (Sandbox Code Playgroud)

  • 有一次我妈妈告诉我,如果她让媒体播放器在后台打开,她的小球游戏会运行得更好 - 当时我只是笑了。现在我看到了解释:) (2认同)