运行几帧后,位图动画停止工作

时间:2016-11-24 12:48:22

标签: c# winforms animation bitmap

我试图在Windows窗体应用程序上创建一个动画位图。计时器对象设置为100毫秒的间隔,代码的工作方式如下:

我有一个2560x2560位图,这是我的地图,一个名为' pb'包含此地图,图片框的大小为800x800,图像拉伸参数打开,以提供更好的分辨率。我有一个包含火炬框架的7个元素的位图数组。我的想法是,我将当前的火炬位图绘制到地图上,设置' pb'到地图并调用invalidate过程重绘它。然后将绘制了火炬的位图恢复为原始地图位图' org_btm'。

代码如下:

PreparedStatement

' torch_anim_c'是位图数组的索引计数器。 所以出现的问题是火炬在前几帧工作并停止在那里工作,被卡在1帧上,当我在调试器中运行带有断点的代码时,它表明代码即使在图像时也会运行卡住了,程序响应其他功能仍然有效。 你有任何想法如何解决这个问题? 提前谢谢。

我有一张带有卡住火炬动画的地图片段: Torch Stuck Snippet

编辑:' Point()'是20 * 64,因为火炬大小是64x64,它位于第20位,地图是40 * 40个瓷砖。

2 个答案:

答案 0 :(得分:0)

使用photoshop将其转换为gif格式,然后使用此类

public class GifImage
{
    private Image gifImage;
    private FrameDimension dimension;
    private int frameCount;
    private int currentFrame = -1;
    private bool reverse;
    private int step = 1;

    public GifImage(string path)
    {
        gifImage = Image.FromFile(path);
        dimension = new FrameDimension(gifImage.FrameDimensionsList[0]);
        frameCount = gifImage.GetFrameCount(dimension);
    }

    public bool ReverseAtEnd {
        get { return reverse; }
        set { reverse = value; }
    }

    public Image GetNextFrame()
    {

        currentFrame += step;
        if (currentFrame >= frameCount || currentFrame < 1) {
            if (reverse) {
                step *= -1;
                currentFrame += step;
            }
            else {
                currentFrame = 0;
            }
        }
        return GetFrame(currentFrame);
    }

    public Image GetFrame(int index)
    {
        gifImage.SelectActiveFrame(dimension, index);
        return (Image)gifImage.Clone();
    }
}

只要

,就在formload ot上初始化它
GifImage gifImage = new GifImage(filePath);

如果你想在结尾反转它,请将Reverse变量设置为true

在计时器刻度处使用该代码

pb.Image = gifImage.GetNextFrame();

答案 1 :(得分:-1)

更改pb.Invalidate();使用pb.Update();