gpt4 book ai didi

c# - C# 中的 Gif 动画文件的帧率低于应有的帧率

转载 作者:行者123 更新时间:2023-11-30 13:37:08 25 4
gpt4 key购买 nike

在我的软件运行完成后,我得到了一个全屏加载页面,其中包括一个预加载器 gif 文件....这与 Windows 8 用于商店和地铁的完全一样。

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

我真的不知道该怎么办,因为我试图在互联网上搜索以找到解决方案,但我遇到的任何问题都不清楚或无关。

我怀疑编译器以某种方式忽略了我导入的 gif 文件中集成的 fps。但我不知道如何将 fps 设置为文件的 fps,或者让 IDE/编译器在涉及该文件时忽略其规则..请告知 <3

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

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

最佳答案

这是一个正常的故障,GIF 以 10 毫秒为单位指定一帧的显示时间。但是默认情况下,Windows 上的计时器对于如此低的时间间隔不够准确。定时器由系统时钟中断更新,默认情况下每秒滴答 64 次。为计时器提供的精度不超过 15.625 毫秒。实际上,您的 GIF 将以 2/3 速度播放,或多或少。

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

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

样板代码:

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

关于c# - C# 中的 Gif 动画文件的帧率低于应有的帧率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25382400/

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