Как показать определенный кадр изображения GIF в C#?
Я хочу показать кадр изображения GIF. Я искал и обнаружил, что следующий код должен работать, но он не работает. он правильно определяет количество кадров, но показывает весь кадр gif вместо указанного кадра. Спасибо всем.
Image[] frames = new Image[36];
Image GG = Image.FromFile(@"C:\Users\Administrator\TEST C#\TEST2frame2\chef.gif");
FrameDimension dimension = new FrameDimension(GG.FrameDimensionsList[0]);
// Number of frames
int frameCount = GG.GetFrameCount(dimension);
label1.Text = frameCount.ToString();
// Return an Image at a certain index
GG.SelectActiveFrame(dimension, 1);
frames[1] = ((Image)GG.Clone());
pictureBox1.Image = frames[1];
2 ответа
Используйте свой собственный код вплоть до вызова SelectActiveFrame() и после этого измените на следующие строки:
frames[0] = new Bitmap(GG);
pictureBox1.Image = frame[0];
Это должно сделать свое дело. Пожалуйста, не забудьте утилизировать созданные изображения.
О, это работает, но не так, как вы ожидаете.
Когда вы устанавливаете активный кадр изображения GIF, он фактически перезапускает свою анимацию из этого кадра. Вы должны остановить его при смене кадра, установив pictureBox.IsEnabled
к ложному, например. Попробуйте следующий код
private Image img;
public Form1()
{
InitializeComponent();
img = Image.FromFile(@"C:\Users\Administrator\TEST C#\TEST2frame2\chef.gif");
pictureBox1.Image = img;
}
private void button1_Click(object sender, EventArgs e)
{
var dim = new FrameDimension(img.FrameDimensionsList[0]);
img.SelectActiveFrame(dim, 1);
pictureBox1.Enabled = false;
}
Попробуйте нажать кнопку в разные моменты, и вы увидите, что активная рамка изображения изменится.