我试图在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个瓷砖。
答案 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();