Създаване на анимации в Windows Forms

Анимацията се отнася до динамичната промяна на изображение във формуляр или в контрола PictureBox. Невизуалният елемент Timer се използва за отчитане на времеви интервали. Най-важното свойство на този елемент е Interval, което определя колко често се активира таймерът. Стойността на свойството се измерва в милисекунди, стойността по подразбиране е 100.

Нормалната честота на кадрите е 24 кадъра в секунда, но това се използва главно при показване на филми (т.е. огромен брой кадри). При малък брой кадри стойност от 1000 е доста приемлива, т.е. 1 кадър в секунда.

Най-важното събитие на таймера - Tick, се генерира, когато интервалът на таймера изтече. Кодът за промяна на изображението се поставя в манипулатора за това събитие. Таймерът се стартира чрез метода Старт и се спира чрез метода Стоп.

Самите изображения могат да бъдат поставени в контрола ImageList чрез промяна на стойността на свойството Images. Серийните номера (индексите) на фигурите започват от нула.

Пример. Да кажем, че има 5 изображения в ImageList. Уверете се, че се променят със скорост 1 кадър в секунда в контролата PictureBox. Нека декларираме img променлива от тип Integer с атрибут Public, в която ще бъде поставен поредният номер на изображението. Трябва да създадете формуляр, да приложите към него бутон, елементи PictureBox, ImageList и Timer. Необходимо е да поставите надпис върху бутона, например „Стартиране на шоуто“. След това трябва да зададете стойността на свойството Interval на елемента Timer на 1000. След това трябва да поставите 5 изображения в ImageList.

В манипулатора на събития Timer1_Tick напишете следния код:

Visual Basic .Net:

Ако img = 4, тогава img = -1

Visual C#:

Последният ред предоставяцикличен дисплей, веднага щом се покаже последното изображение, автоматично ще се извърши преход към първото.

В манипулатора на събитие за щракване на бутон трябва да напишете началния код на таймера:

Visual Basic .Net:

Visual C#:

Таймерът ще бъде спрян, когато формата бъде затворена. Можете да осигурите спиране с помощта на програмен код.

Таймерът може да се стартира автоматично. За да направите това, задайте свойството Enabled на True.

Недостатъците на този метод са ограничението на броя изображения, които могат да бъдат заредени в ImageList (определено от обема на паметта), и фактът, че размерът на изображението не може да надвишава 256 x 256 пиксела. Ето защо най-често изображенията за анимация се поставят в определена папка, от която след това се избират.

За работа с компютърни папки се използва специален обект Directoty. Този обект принадлежи към базовия клас System.IO, който трябва да бъде импортиран в проекта. За да получите списък с файлове в дадена папка, използвайте метода GetFiles, който има следния синтаксис:

Visual Basic .Net:

Visual C#:

Името на папката трябва да бъде посочено изцяло, за C# се използва двойна наклонена черта като разделител на папки, филтърът е незадължителен параметър и задава шаблон за избор на файлове, например по разширение. Променливата, в която се поставя резултатът, се декларира като динамичен масив:

Visual Basic .Net:

Затъмняване на файлове като String()

Visual C#:

Размерът на масива ще бъде зададен автоматично при попълването му с метода GetFiles. За достъп до списъка с файлове от всички процедури трябва да му бъде присвоен публичен атрибут в областта за описание на модула. Пример за използване на този метод:

Visual Basic.Net:

файлове = Directory.GetFiles("C:\DocumentsandSettings\User\MyDocuments\VisualStudio 2005\Projects\graphics1\Resources", "*.jpg")

Visual C#:

files=Directory.GetFiles("("C:\\Documents and Settings\\User\\MyDocuments\\Visual Studio 2005\\Projects\\graphics1\\Resources"","*.jpg");

Масивът от файлове е обект, неговото свойство Length определя броя на файловете в дадената папка.

Пример. В елемента на изображението PictureBox сменяйте изображения от някаква папка с честота 1 кадър в секунда.Нека декларираме променливите img (сериен номер на изображение) и img_count (брой изображения в папката) от тип Integer с атрибута Public. Ще декларираме и масив от низове с този атрибут, където ще поставим имената на всички графични файлове от папката:

Visual Basic .Net:

Обществено img, img_count AsInteger

Публични файлове () AsString

Visual C#:

Public int img,img_count;

публичен низ [] файлове;

Необходимо е да създадете формуляр, да поставите върху него елементи PictureBox, Timer и Button със съответния надпис. В кода на манипулатора на събитие Click на бутона трябва да напишете кода, който сканира посочената папка, избира всички файлове с изображения от нея, изчислява броя им и стартира таймера:

Visual Basic .Net:

файлове = Directory.GetFiles("C:\graphics1", "*.jpg")

Visual C#:

Филтрирането на файлове е необходимо, защото Дори ако папката съдържа само файлове с изображения, в папката може да има скрити неграфични файлове, което може да доведе до грешка.

Следният код трябва да бъде написан в манипулатора на събития Timer1_Tick:

Visual Basic .Net:

Ако img = img_count Тогава img = 0

Visual C#:

if (img==img_count) img=0;

Този код работи вако в папката с файлове има поне един графичен файл. Но най-общо казано, тази ситуация трябва да се провери и ако няма графични файлове, трябва да се покаже съобщение за грешка.

Папката с изображения се настройва ръчно тук. За да изберете папка, докато работите с програмата, можете да използвате контролата FolderBrowserDialog. Събитията на този обект се използват рядко. Реакцията на потребителя се оценява от стойността на променливата DialogResult, името на папката, избрана от потребителя, се записва като стойност на свойството SelectedPath. Тук също трябва да проверите дали има графични файлове в папката или не, например като сравните броя на откритите графични файлове с нула. В този случай кодът за манипулатора на събития за щракване върху бутона "Стартиране на показването" ще бъде нещо подобно:

Visual Basic .Net:

Затъмняване на резултата Като DialogResult

Ако (резултат = Windows.Forms.DialogResult.OK) Тогава

файлове = Directory.GetFiles(FolderBrowserDialog1.SelectedPath, "*.jpg")

Ако img_count = 0 Тогава

MsgBox("В тази папка няма графични файлове", MsgBoxStyle.OkOnly)

Visual C#:

ако (резултат == DialogResult.OK)

файлове = Directory.GetFiles(папкаBrowserDialog1.SelectedPath, "*.jpg");

if (img_count == 0) MessageBox.Show("В тази папка няма графични файлове", "Грешка!", MessageBoxButtons.OK);

С тези методи и обекти можете също да се движите, като местите PictureBox около формуляра или като го преоразмерявате.

Забележка: Само една стойност може да се използва като филтър за обекта FolderBrowserDialog, следователно могат да бъдат избрани само графични данни от същия тип.

следваща лекция ==>
Управление на PictureBoxОптимално оразмеряване на елемента PictureBox
Полезен ли е материалът? Споделяне:

Не намерихте това, което търсихте? Google да ви помогне!