Анимирование цветов радуги в C#
Пример рисует градиент цвета, который использует цвета радуги. Этот пример оживляет это.
Когда вы нажимаете на градиент цвета, следующий код запускает или останавливает анимацию.
// Начать или останавливать анимацию цветов радуги.
private void picRainbow_MouseClick(object sender, MouseEventArgs e)
{
// Посмотрим, следует ли нам начинать или останавливаться.
if (tmrMoveSample.Enabled)
{
// Остановить анимацию.
tmrMoveSample.Enabled = false;
return;
}
// Получить позицию мыши как долю
// ширины PictureBox.
float rainbow_color = e.X / (float)picRainbow.ClientSize.Width;
// Преобразуем в соответствующий цвет.
SelectedColor = Rainbow.RainbowNumberToColor(rainbow_color);
// Преобразуем обратно в соответствующее число.
SelectedRainbowNumber = Rainbow.ColorToRainbowNumber(SelectedColor);
// Перерисовать.
picRainbow.Refresh();
picSample.Refresh();
// Запустите анимацию.
tmrMoveSample.Enabled = true;
}
Если включен Timer tmrMoveSample, тогда программа в настоящее время оживляет цвета радуги. В этом случае код отключает Timer, чтобы остановить анимацию.
Если анимация в данный момент не запущена, код получает числовое значение цвета, которое вы нажали, и использует метод RainbowNumberToColor, чтобы преобразовать его в цвет. Он использует метод SelectedRainbowNumber, чтобы преобразовать его обратно в число. (См. для получения информации об этих методах.)
Метод заканчивается обновлением радуги и образца PictureBox и запускает Timer.
В следующем коде показан обработчик события Timer Timer.
private const float ColorDelta = 0.02f;
// Продолжаем анимацию радужных цветов.
private void tmrMoveSample_Tick(object sender, EventArgs e)
{
// Обновляем текущий цвет.
SelectedRainbowNumber += ColorDelta;
if (SelectedRainbowNumber > 1f)
SelectedRainbowNumber = 0f;
SelectedColor =
Rainbow.RainbowNumberToColor(SelectedRainbowNumber);
// Нарисуем новый цвет.
picRainbow.Refresh();
picSample.Refresh();
}
Этот код добавляет значение ColorDelta к выбранному значению цвета. Значение должно быть между 0 и 1, поэтому, если результат больше 1, код сбрасывает его до 0.
В коде используется метод RainbowNumberToColor для преобразования нового номера цвета в цвет, а затем обновляется два элемента PictureBox.
