如何在框架中拆分 .gif?
How to split a .gif in frames?
我找到的所有代码都给我相同的结果:一堆外观完全相同的框架。意思是:它给了我第一帧的列表,重复了 X 次。我使用的 .gif 有 30 帧,所以我得到第一帧的 30 倍,而不是 30 个不同的帧。
public static Image[] GetFramesFromAnimatedGIF(Image IMG)
{
List<Image> IMGs = new List<Image>();
int Length = IMG.GetFrameCount(FrameDimension.Time);
for (int i = 0; i < Length; i++)
{
IMG.SelectActiveFrame(FrameDimension.Time, i);
IMGs.Add(IMG);
}
return IMGs.ToArray();
}
我错过了什么?我看过的所有代码都将第一帧重复了 X 次。
这是应该看起来的样子(使用网页)。看看每一帧有何不同?
这是我在将该数组中的每个帧保存到一个文件夹位置(一堆相同的帧)后寻找的内容:
P.S.: 是的,我使用的是 .gif 图片。
更新:问题似乎出在我在 OpenFileDialog 中读取文件时,因为如果我通过代码传递我的 .gif 它会起作用。那么如何在 OpenFileDialong 中读取动画 gif?谢谢。
IMGs.Add(IMG);
这就是问题所在,您一遍又一遍地添加相同的 IMG 对象。您需要对框架进行深度复制。这很容易做到:
IMGs.Add(new Bitmap(IMG));
我找到的所有代码都给我相同的结果:一堆外观完全相同的框架。意思是:它给了我第一帧的列表,重复了 X 次。我使用的 .gif 有 30 帧,所以我得到第一帧的 30 倍,而不是 30 个不同的帧。
public static Image[] GetFramesFromAnimatedGIF(Image IMG)
{
List<Image> IMGs = new List<Image>();
int Length = IMG.GetFrameCount(FrameDimension.Time);
for (int i = 0; i < Length; i++)
{
IMG.SelectActiveFrame(FrameDimension.Time, i);
IMGs.Add(IMG);
}
return IMGs.ToArray();
}
我错过了什么?我看过的所有代码都将第一帧重复了 X 次。
这是应该看起来的样子(使用网页)。看看每一帧有何不同?
这是我在将该数组中的每个帧保存到一个文件夹位置(一堆相同的帧)后寻找的内容:
P.S.: 是的,我使用的是 .gif 图片。
更新:问题似乎出在我在 OpenFileDialog 中读取文件时,因为如果我通过代码传递我的 .gif 它会起作用。那么如何在 OpenFileDialong 中读取动画 gif?谢谢。
IMGs.Add(IMG);
这就是问题所在,您一遍又一遍地添加相同的 IMG 对象。您需要对框架进行深度复制。这很容易做到:
IMGs.Add(new Bitmap(IMG));