gpt4 book ai didi

c# - 通过 gif 向后移动比向前移动慢得多

转载 作者:太空狗 更新时间:2023-10-29 23:51:05 24 4
gpt4 key购买 nike

我希望能够逐帧移动 gif。在下面的示例中,我使用轨迹栏来选择我想要查看的 gif 帧。对于设计器,我只是在屏幕中央放置了一个 PictureBox,并在屏幕底部粘贴了一个 TrackBar。

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Imaging;

namespace TestGifProject {
public partial class Form1 : Form {
private Image gif;
private FrameDimension fd;

public Form1() {
InitializeComponent();

gif = Image.FromFile("PATH\\TO\\SOME\\GIF.gif");
// just for this quick example...
this.Width = gif.Width + 20;
this.Height = gif.Height + 53;

pictureBox1.Width = gif.Width;
pictureBox1.Height = gif.Height;

pictureBox1.Image = gif;

fd = new FrameDimension(gif.FrameDimensionsList[0]);

trackBar1.SetRange(0, gif.GetFrameCount(fd) - 1);
}

private void trackBar1_MouseUp(object sender, MouseEventArgs e) {
gif.SelectActiveFrame(fd, trackBar1.Value);

pictureBox1.Image = gif;
}
}
}

当您移动并释放轨迹栏时,框架会正确显示,但是当您向后滚动而不是向前滚动时,框架会慢得多(向前滚动的速度可能快 10 倍),通常长到足以让应用程序看起来像是崩溃了。我可以做些什么来加快向后滚动 gif 的速度吗?

最佳答案

一个选项是创建一个列表,您可以在其中添加每个框架。 SelectActiveFrame() 可能使用更复杂的逻辑解析正确的图像,这可能是 Action 缓慢的原因。

为您类(class)的根目录创建一个新列表:

private List<Image> frames = new List<Image>();

用帧图像填充列表:

for(int i = 0; i < gif.GetFrameCount(fd); i++)
{
gif.SelectActiveFrame(fd, i);
frames.Add((Image)gif.Clone());
}

然后使用列表将图像设置到PictureBox:

pictureBox1.Image = frames[trackBar1.Value];

我还没有测试过这个,但我认为它应该可以工作。

关于c# - 通过 gif 向后移动比向前移动慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24209444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com