Анимирование цветов радуги в 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.