【问题标题】:How to resume picturebox image's gif winforms C#如何恢复picturebox图像的gif winforms C#
【发布时间】:2016-05-20 19:52:18
【问题描述】:

当满足特定条件时,我禁用我的图片框并冻结图像,每当它再次运行时,gif 都会重新开始,而不是从停止的地方重新开始吗?

停止图片框:http://prntscr.com/b6gg7a “恢复”图片框:http://prntscr.com/b6gglb

【问题讨论】:

  • 这似乎不太可能。
  • 这真的很烦我,我不知道如何解决它,请感谢任何提示@TaW
  • 这是横版游戏?当您停止前进时,您希望背景冻结。对吗?
  • 阻止它的古怪方式暗示了对动画 gif 的支持是多么少。如果你真的真的需要它并且真的真的......想要使用 GIF,你可以尝试 a) 找到一种方法来确定你停止的帧,然后 b) 以新的顺序重新创建 gif ,从那个框架开始。显然,一个 PITA,尤其是作为 a) 部分,甚至不是很清楚。 (嵌入标记并在屏幕截图中搜索它们?Argggh)
  • 只有一个;没什么好想的..

标签: c# winforms picturebox


【解决方案1】:

我相信这确实是一个相当乏味/不太可能用动画 gif 来执行。

您可以/应该做的 IMO 如下:

不要将背景制作成 gif,而是将其分成多个帧(图片)。 设置一个计时器,触发背景更改为下一个图像。 您可以像启用和禁用图片框一样暂停和恢复该计时器。

您的背景更改函数可能如下所示:

int bgCount = 8; //Amount of frames your background uses
int bgCurrent = 0;
string[] bgImg = {
    "bg1.png",
    "bg2.png",
    "bg3.png",
    "bg4.png",
    "bg5.png",
    "bg6.png",
    "bg7.png",
    "bg8.png",
};
        void changeBG()
{
    if(bgCurrent > bgCount-1) //If not displaying the last background image go to the next one
    {
        bgCurrent++;
        imgBox.image = bgImg[bgCurrent];
    }else //If displaying the last background image -> Start with the first one
    {
        bgCurrent = 0;
        imgBox.image = bgImg[bgCurrent];
    }
}
}

您只需让计时器触发此事件。您只需启动和停止计时器。

旁注:

1* 您可以尝试,而不是更改源,只需将 8 个图像框化并根据需要调用/显示它们。

【讨论】:

  • 我已经尝试过另一个用户在stackoverflow上回答了这个问题,但情况更糟。
  • 这怎么可能更糟?这基本上是在爆炸 gif 并将其与 c# 粘合在一起?还是在运行时更糟糕,比如不流畅,需要很多资源?
  • 其实用gif是个聪明的主意:相对于winforms的内部动画,它的表现反常、跳跃,它可以显示得相当流畅。但并非所有聪明的想法都能一直奏效..
猜你喜欢
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多