Анимация изображений в C#
В этом примере показано, как анимировать изображения, загружая их во время выполнения, а затем воспроизводя их по одному.
Чтобы упростить поиск изображений, я добавил их в проект. (Откройте меню «Проект», выберите «Добавить существующий элемент» и выберите изображения.) Затем я выбрал изображения в обозревателе решений и установил их свойства «Копировать в выходной каталог» в «Копировать, если новый», чтобы они были скопированы в исполняемый каталог. Затем программа может легко найти их, указав только имена файлов, а не их пути.
Для анимации изображений первый шаг загружает их. Следующий код показывает, как программа загружает изображения при запуске.
// Изображения кадра.
private Bitmap[] Frames;
// Индекс текущего кадра.
private int FrameNum = 0;
// Загружаем изображения.
private void Form1_Load(object sender, EventArgs e)
{
// Загружаем фреймы.
Frames = new Bitmap[18];
for (int i = 0; i < 18; i++)
{
Frames[i] = new Bitmap("Frame" + i + ".png");
}
// Отображение первого кадра.
picFrame.Image = Frames[FrameNum];
}
Программа сохраняет изображения в массиве Frames. Первоначально он устанавливает FrameNum в 0, поэтому он отображает первый кадр.
Когда форма загружается, программа пеет от 0 до 17 загружает файлы изображений с именами формы Frame0.png, Frame1.png и т. д. Обработчик события Load формы заканчивается, отображая первый кадр в picFrame PictureBox.
Форма программы содержит Timer, который отображает фреймы. Следующий код показывает, как обработчик событий Timer Tick отображает следующий кадр.
// Отображение следующего изображения.
private void tmrNextFrame_Tick(object sender, EventArgs e)
{
FrameNum = ++FrameNum % Frames.Length;
picFrame.Image = Frames[FrameNum];
}
Приращение кода FrameNum и принимает результат по модулю числа кадров. Это означает, что FrameNum всегда представляет номер кадра между 0 и самым большим индексом в массиве Frames.
Затем обработчик событий отображает текущий кадр в picFrame PictureBox.
Кнопка запуска программы использует следующий код для запуска или остановки Timer.
// Запуск или остановка анимации.
private void btnStartStop_Click(object sender, EventArgs e)
{
tmrNextFrame.Enabled = !tmrNextFrame.Enabled;
if (tmrNextFrame.Enabled) btnStartStop.Text = "Stop";
else btnStartStop.Text = "Start";
}
Конечной частью программы является полоса прокрутки с именем hscrFps. Когда вы изменяете значение полосы прокрутки, следующий код изменяет скорость компонента Timer.
// Установите задержку на кадр.
private void hscrFps_Scroll(object sender, ScrollEventArgs e)
{
tmrNextFrame.Interval = 1000 / hscrFps.Value;
lblFps.Text = hscrFps.Value.ToString();
}
