Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компьютерная графика, мультимедиа и игры на Vis...doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.92 Mб
Скачать

Глава 63. Анимация текста в консольном приложении

Листинг 63.1. Модуль Module1.cs после записи нашего кода.

using System;

//Подключаем пространство имен Timers:

using System.Timers;

namespace Animated_text_on_console

{

/// <summary>

/// Summary description for Class1.

/// </summary>

class Class1

{

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main(string[] args)

{

// TODO: Add code to start application here

//

//Вводим таймер, который генерирует событие

//через каждый Interval времени, равный

//3000 миллисекундам или 3 секундам:

System.Timers.Timer myTimer =

new System.Timers.Timer(3000);

myTimer.Elapsed+=

new ElapsedEventHandler(OnTimedEvent);

//Чтобы таймер совершил событие

//только один раз и остановился,

//в следующей строке убираем символы //:

//myTimer.AutoReset = false;

//Запускаем в работу таймер:

myTimer.Enabled = true;

//Выводим сообщение,

//как остановить анимацию:

Console.WriteLine(

"Чтобы остановить анимацию,

нажмите клавиши c + Enter.");

//Организовываем цикл работы таймера

//при помощи оператора while,

//который выключает таймер

//после нажатия клавиш c + Enter:

while(Console.Read()!='c');

}

//Эта процедура выводит анимационное сообщение

//через каждый Interval времени работы таймера:

private static void OnTimedEvent(object source,

ElapsedEventArgs e)

{

//Анимационное сообщение:

Console.WriteLine(

"Введите исходные данные

и нажмите клавишу Enter:");

}

}

}

Аналогично можно разработать программы для циклического вывода на консоль любой строки текста как одного содержания, так и различного содержания. Таким образом, мы закончили раздел по разработке системы из анимационных программ на языке Visual C#. Напомним, что этот же раздел по разработке системы из анимационных программ на другом главном (в мире программирования) языке Visual Basic даны в нашей предыдущей книге [8].

Часть XIII. Методология создания, конвертирования и мультипликации изображений на форме Глава 64. Методика задания, конвертирования и поочередной замены изображений

Листинг 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, или какой-либо еще.

Таким образом, по разработанной в данной главе методике можно спроектировать на экране циклическую замену любых изображений, заданных в виде графических файлов.

В следующей главе мы перейдем к созданию более сложных приложений типа мультипликаций.