Методика задания, конвертирования и поочередной замены изображений
Листинг 64.1. Метод с нашим кодом для вывода фонового изображения.
private void Form1_Load(object sender, EventArgs e)
{
this.BackgroundImage =
Image.FromFile("D:\\MyDocs\\MyDocs F\\Fig1.jpg");
}
Интересна другая запись нашей строки кода:
this.BackgroundImage =
Image.FromFile(@"D:\MyDocs\MyDocs F\Fig1.jpg");
После старта проекта (Build, Build Solution; Debug, Start Without Debugging) появляется форма с фоновым изображением в виде файла Fig1.jpg (рис. 64.6).
Листинг 64.2. Обработчик щелчка кнопки для вывода фонового изображения.
private void button1_Click(object sender, EventArgs e)
{
this.groupBox1.BackgroundImage =
Image.FromFile("D:\\MyDocs\\MyDocs F\\Fig5.jpg");
}
Теперь после старта проекта и щелчка кнопки предыдущее фоновое изображение Fig1.jpg (листинг 64.1) заменится новым изображением Fig5.jpg (листинг 64.2), показанным на рис. 64.7.
Аналогично можно записать наш код в любой другой метод, например, в обработчик щелчка по форме или по любому другому элементу управления.
Листинг 64.3.
Конвертирование, сохранение и вывод изображения.
private void Form1_Load(object sender, EventArgs e)
{
//Загружаем Fig2_1.jpg в объект myImage класса Image:
Image myImage =
Image.FromFile(@"D:\MyDocs\MyDocs F\Fig2_1.jpg");
//Конвертируем Fig2_1.jpg в (.gif) и сохраняем Save:
myImage.Save(@"D:\MyDocs\MyDocs F\Fig2_1.gif",
System.Drawing.Imaging.ImageFormat.Gif);
//Выводим изображение как фоновое для формы:
this.BackgroundImage =
Image.FromFile(@"D:\MyDocs\MyDocs F\Fig2_1.gif");
}
Аналогично для конвертирования изображения Fig2_1.gif из формата (.gif), например, в формат (.png) используется код:
Image myImage =
Image.FromFile(@"D:\MyDocs\MyDocs F\Fig2_1.gif");
myImage.Save(@"D:\MyDocs\MyDocs F\Fig2_1.png",
System.Drawing.Imaging.ImageFormat.Png);
Аналогично конвертируются изображения из одного формата в другой из перечня поддерживаемых форматов на рис. 64.8.
После старта проекта мы увидим форму с фоновым изображением в другом формате (рис. 64.9).
Теперь в файл Form1.cs необходимо написать нашу часть кода. Сначала в любом месте внутри класса Form1 (например, ниже свернутого блока кода) объявляем массив изображений класса Image и глобальные переменные:
//Массив из 8 изображений (индекс 0 не используем):
Image[] myArrayImages = new Image[9];
//Объявляем и инициализируем целочисленные переменные:
int j = 0;
int k = 1;
Дважды щелкаем по Form1 в режиме проектирования (или в панели Properties на вкладке Events дважды щелкаем по имени события Load) и в появившийся шаблон записываем наш код, после чего метод принимает такой вид.
Листинг 64.4. Метод Form1_Load для загрузки изображений.
private void Form1_Load(object sender, EventArgs e)
{
//Из графических файлов 8 рисунков формата (.jpg)
//заполняем массив myArrayImages[9]:
myArrayImages[1] =
Image.FromFile("D:\\MyDocs\\MyDocs F\\Fig1.jpg");
myArrayImages[2] =
Image.FromFile("D:\\MyDocs\\MyDocs F\\Fig2.jpg");
myArrayImages[3] =
Image.FromFile("D:\\MyDocs\\MyDocs F\\Fig3.jpg");
myArrayImages[4] =
Image.FromFile("D:\\MyDocs\\MyDocs F\\Fig4.jpg");
myArrayImages[5] =
Image.FromFile("D:\\MyDocs\\MyDocs F\\Fig5.jpg");
myArrayImages[6] =
Image.FromFile("D:\\MyDocs\\MyDocs F\\Fig6.jpg");
myArrayImages[7] =
Image.FromFile("D:\\MyDocs\\MyDocs F\\Fig7.jpg");
myArrayImages[8] =
Image.FromFile("D:\\MyDocs\\MyDocs F\\Fig8.jpg");
}
Аналогично в приложение загружаются другие массивы, если мы хотим использовать чередование серии одних изображений сериями других. Чтобы подключить к работе таймер, дважды щелкаем значок timer1 (ниже формы в режиме проектирования). Появляется файл Form1.cs с шаблоном, который после записи нашего кода принимает следующий вид.
Листинг 64.5. Метод для компонента Timer1.
private void timer1_Tick(object sender, EventArgs e)
{
//Выводим изображение в качестве фонового PictureBox:
pictureBox1.BackgroundImage = myArrayImages[j];
//Организовываем цикл для восьми рисунков:
j = j + k;
if (j == 8)
{
//От последнего рисунка переходим к первому:
k = -8;
}
else if (j == 0)
{
// Задаем первый рисунок для начала цикла:
k = 1;
}
}
Запускаем проект: Build, Build Solution; Debug, Start Without Debugging.
В ответ Visual C# выполняет программу и на рабочий стол выводит Form1 в режиме выполнения (рис. 64.9). Внутри элемента pictureBox осуществляется поочередная замена одного рисунка следующим за интервал времени в 1000 миллисекунд, который мы установили с помощью свойства Interval в панели Properties для компонента Timer (Таймер). Частота смены изображений регулируется за счет изменения значения свойства Interval. Вместо элемента pictureBox в качестве окна мы можем использовать другой элемент, например, Panel или GroupBox, или какой-либо еще.
Таким образом, по разработанной в данной главе методике можно спроектировать на экране циклическую замену любых изображений, заданных в виде графических файлов.
В следующей главе мы перейдем к созданию более сложных приложений типа мультипликаций.