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

       

Разработка мультипликации при помощи списка рисунков 


Листинг 66.1. Метод для компонента Timer.

//Объявляем глобальную переменную currentImage

//для номера текущего рисунка и приравниваем нулю:

int currentImage = 0;

private void timer1_Tick(object sender, EventArgs e)

{

      //Последовательно выводим рисунки:

      if(imageList1.Images.Empty != true)

          {

          //Центрируем рисунок внутри рамки PictureBox1:

          pictureBox1.SizeMode =

                        PictureBoxSizeMode.CenterImage;

          //Выводим рисунок с номером 'currentImage' :



          pictureBox1.Image =

                            imageList1.Images[currentImage];

          //Организовываем цикл по индексу 'currentImage' :

          currentImage = currentImage + 1;

          if (currentImage == imageList1.Images.Count)

                                           currentImage = 0;

          }

}

В этом коде главным является вызов свойства Image, при помощи которого текущий рисунок загружается в рамку элемента управления pictureBox1.

Чтобы установить значение свойства Interval компонента Timer в зависимости от свойства Value ползунка элемента управления TrackBar, дважды щелкаем элемент управления TrackBar в режиме проектирования. Появляется файл Form1.cs с шаблоном, который после записи нашего кода принимает следующий вид.

Листинг 66.2. Метод для элемента управления TrackBar.

private void trackBar1_Scroll(object sender, EventArgs e)

{

      timer1.Enabled = true;

      timer1.Interval = trackBar1.Value;

}

Согласно разработанной выше методике, чтобы иметь возможность приостановить (и запустить вновь) процесс анимации на любом рисунке при помощи кнопки Stop/Start Animation, дважды щелкаем эту кнопку в режиме проектирования (рис. 66.1). Появляется файл Form1.cs с шаблоном, который после записи нашего кода принимает такой вид.

 

Листинг 66.3. Метод для кнопки Stop/Start Animation.

bool OffOn = false;

private void button6_Click(object sender, EventArgs e)

{

      //Задаем чередование остановки и возобновления анимации


      //после каждого щелчка кнопки button:
      if (OffOn == false)
      {
          //Приостанавливаем анимацию:
          timer1.Enabled = false;
          //Изменяем значение OffOn на противоположное:
          OffOn = true;
      }
      else
      {
           //Возобновляем анимацию:
           timer1.Enabled = true;
           //Изменяем значение OffOn на противоположное:
           OffOn = false;
      }
}
Листинг 66.4. Метод для компонента PrintDocument.
private void printDocument1_PrintPage(object sender,
               System.Drawing.Printing.PrintPageEventArgs e)
{
      // Выводим рисунок, который видим на экране
      //в рамке pictureBox1, при помощи метода DrawImage:
      e.Graphics.DrawImage(pictureBox1.Image, 0, 0);
}
Теперь дважды щелкаем кнопку Print (рис. 66.1). Открывается файл Form1.cs с шаблоном, в который записываем код из приведенного выше параграфа “Методика печати изображения на принтере”.
В заключении этой главы сделаем вывод, что при разработке мультипликации при помощи компонента ImageList (Список рисунков) код программы получается короче, однако из-за того, что элемент ImageList предназначен для хранения коллекции растровых изображений небольшого размера (не более 256 на 256 пикселей), качество мультипликации из наших больших изображений (размером 880 на 988 пикселей) получается хуже, чем в предыдущей главе, где графические файлы поэтапных рисунков мы ввели непосредственно в приложение (при помощи метода FromFile). Поэтому, когда требуется спроектировать мультипликацию высокого качества из больших (по объему занимаемой памяти) рисунков в виде графических файлов любого формата, целесообразно применять методику, разработанную нами в предыдущей главе.

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