动画 GIF 帧速率似乎低于预期

2023-12-13

我有一个winforms应用程序,上面有一个 gif,用于让用户了解停滞的进程。

问题是它的播放速度比其他应用程序(chrome、internet explorer)慢得多。

我已经尝试过 gif 了PictureBox and Label但结果速度是相同的。经过一番研究后我发现this问题和传奇@Hans Passant的答案,但不幸的是应用他建议的样板代码没有任何区别。

下面是简单的重现代码:

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

如果需要的话,还有设计师代码:

partial class Form1
{
    private System.ComponentModel.IContainer components = null;

    protected override void Dispose ( bool disposing )
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    private void InitializeComponent ()
    {
        System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
        this.pictureBox1 = new System.Windows.Forms.PictureBox();
        this.label1 = new System.Windows.Forms.Label();
        ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
        this.SuspendLayout();
        //
        // pictureBox1
        //
        this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
        this.pictureBox1.Location = new System.Drawing.Point(8, 9);
        this.pictureBox1.Name = "pictureBox1";
        this.pictureBox1.Size = new System.Drawing.Size(166, 119);
        this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
        this.pictureBox1.TabIndex = 0;
        this.pictureBox1.TabStop = false;
        //
        // label1
        //
        this.label1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        this.label1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        this.label1.Image = ((System.Drawing.Image)(resources.GetObject("label1.Image")));
        this.label1.Location = new System.Drawing.Point(180, 9);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(158, 119);
        this.label1.TabIndex = 1;
        //
        // Form1
        //
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(346, 134);
        this.Controls.Add(this.label1);
        this.Controls.Add(this.pictureBox1);
        this.Name = "Form1";
        this.Text = "Form1";
        ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
        this.ResumeLayout(false);

    }

    #endregion

    private System.Windows.Forms.PictureBox pictureBox1;
    private System.Windows.Forms.Label label1;
}

两个 gif 的播放速度相同,但低于实际的 gif。应用此代码时还有其他需要注意的地方吗?


你只能得到猜测,我怀疑任何人都会有运气得到复制品:

  • timeBeginPeriod() 从技术上讲可能会失败,尽管当您要求 10 毫秒时这种情况很不寻常,请验证它是否返回 0。
  • 如果图像很大,那么它可能无法足够快地更新。或者你的 UI 线程被其他职责占用太多。 gif 的像素格式与现代机器上视频适配器的像素格式不匹配。每次更新框架时都会完成转换。这是相当昂贵的,特别是如果您还强制重新缩放图像(即 PictureBox.SizeMode != Normal)。使用任务管理器验证您的 UI 线程没有消耗 100% 的核心。
  • 您可以通过运行获得有关有效计时器周期的第二意见powercfg /energy从提升的命令提示符。在您的应用程序运行时执行此操作。它将运行一分钟,然后生成一个 HTML 文件,您可以使用浏览器查看该文件。在“平台计时器解析:计时器请求堆栈”标题下报告,请求的周期值应为 10000。请注意其他进程或驱动程序也可能已发出请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动画 GIF 帧速率似乎低于预期 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现

随机推荐

  • jQuery/javascript - 输入字段(用户、密码)就像 Twitter 的登录一样?

    我怎样才能达到像twitter一样的效果登录表单 右上角 当您单击用户名 传递时 值 用户名 会保留在那里 直到您输入文本 而且也有点暗淡 谢谢你 我已经编写了一个插件来执行此操作 但找不到任何使用类似 twitter div 默认值的插件
  • 将点云的坐标转换为点云库中的另一个坐标,从而使地平面成为X-O-Y平面?

    我有一个来自 kinect fusion 的点云 并使用点云库来分割地平面 ax by c z d 0 成功 我在地平面的 pcl ModelCoefficients 中得到了 a b c d 现在我需要将笛卡尔坐标转换为新的笛卡尔坐标 使
  • 当 iOS 应用程序在后台运行时,您可以收听 Firestore 更新吗?

    我对 Firestore 非常陌生 并试图了解实时更新的工作原理 我现在使用类似的方法从 Firestore 获取更新 db collection Collections session whereField participants ar
  • Linq - 检查where子句中的条件如果字段可以为空

    我有问题 即使项目没有引用 如何检查 where 子句中的条件 最基本的方法 我正在检查我的类中的字段 该字段可以为空 当我以这种方式检查它时 它将返回空引用异常 var soldOutProducts from p in list whe
  • swing 未捕获的异常处理程序

    我正在尝试为 swing 应用程序构建一个通用异常处理程序 如下所述 http www javaspecialists eu archive Issue081 html 我在 jython 中工作 python 语法被编译为 java 并执
  • 我想在Android中使用Xpath来解析XML

    我喜欢在java中使用Xpath解析XML 但是当我在android上做同样的事情时 找不到XPath 任何想法如何实施 如果不可能的话 还有其他更快的 Android 解析器吗 Thanks Kai Android XPath 自 And
  • 获取外键值

    如何获取外键值 我有一个常见的车辆模型 它链接到年份 系列 发动机类型 车身样式 变速箱和传动系统 全部作为外键 我想获取我的应用程序的这些字段的值 但我不知道如何处理它们 任何想法都将受到高度赞赏 class Model models M
  • 完美滚动条默认滚动条保留,并且“完美滚动条”不起作用

    我真的需要这方面的帮助 我想用 完美滚动条 替换 iframe 上的默认滚动条 我已经下载了完美的滚动条 我还将所需的文件包含到我的 html 文档中 根据文档 我在 iframe 中设置了内容容器的样式 结果是 当我加载主页并将鼠标光标移
  • 如何在 1 次后停止 gif 反应本机?

    我有一个 gif 正在反应 我想停止循环 我在我的视图中添加了一个图像 我给图像提供了我的 gif 的路径 它可以工作 但是 gif 进入无限循环 有什么办法停下来吗
  • 如何使用 AVR 的 gnu 汇编器相对于 PC 跳转?

    我有一个使用 avr objcopy 反汇编的二进制文件 中断向量表如下所示 00000000 VECTOR TABLE 0 13 c0 rjmp 38 0x28 RESET 2 b8 c1 rjmp 880 0x374 INT0 4 fd
  • xmlns 属性不允许我解析[重复]

    这个问题在这里已经有答案了 过去一小时我一直在尝试解析这个 XML 文件
  • 简单检查 Android 应用程序后台

    我通过从每个活动的 onResume 调用 plusActivity 和从 onPause 调用 minusActivity 来跟踪我的应用程序中当前可见的活动数量 应该是 0 或 1 plus minusActivity 位于我的 myA
  • 如何检查 Android 是否安装了 Facebook

    我正在修改我的应用程序 以便能够捕获用户在未安装 facebook 应用程序 SSO 所需 的情况下尝试发布的情况 这是我正在使用的代码 try ApplicationInfo info getPackageManager getAppli
  • Firebase 存储 downloadURL 文件结构

    所以我使用 firebase 存储来上传我的网站文件 这是目录结构的示例 Project index html css style css js mainScript js 因此 我以这种结构将这些文件上传到 firebase 但我注意到返
  • Php数组数组从名称获取id

    我在 PHP 中有一个如下所示的数组 my array array my array array id gt myid1 name gt myname1 my array array id gt otherid name gt othern
  • 新款 iPhone X 型号有哪些尺寸级别?

    Apple 推出了三款新 iPhone X 机型 iPhone XR XS 和 XS Max 它们的尺寸类别是什么 与其他 iPhone 型号相比如何 我将为每个型号提供三条信息 纵向时的尺寸类别 横向时的尺寸类别以及屏幕分辨率 means
  • 在简单的Python脚本中列出超出范围的索引

    我刚刚开始学习 Python 想要创建一个简单的脚本 从用户输入中读取整数并打印它们的总和 我写的代码是 inflow list map int input split result 1 for i in inflow result inf
  • 付款捕获后调用 Magento 事件观察者

    我试图在订单创建后并在捕获付款后调用观察者 到目前为止我已经尝试过了 checkout submit all after sales order payment place end sales order place after 销售 订单
  • 如何设置段落字符限制?

    我目前有 p event desc p 其中给出了事件的完整描述 有些有很长的描述 而我只想要前 50 个字符 如何才能实现这一目标 尝试这个 fifty chars width 50ch overflow hidden white spa
  • 动画 GIF 帧速率似乎低于预期

    我有一个winforms应用程序 上面有一个 gif 用于让用户了解停滞的进程 问题是它的播放速度比其他应用程序 chrome internet explorer 慢得多 我已经尝试过 gif 了PictureBox and Label但结