Компьютерная графика, мультимедиа и игры на Visual C#

         

Методика задания, конвертирования и поочередной замены изображений


Листинг 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, или какой-либо еще.
Таким образом, по разработанной в данной главе методике можно спроектировать на экране циклическую замену любых изображений, заданных в виде графических файлов.
В следующей главе мы перейдем к созданию более сложных приложений типа мультипликаций.

Содержание раздела