Анимирование цветов радуги в C#

Пример Числовые значения карты для и из цветов в градиенте цвета в 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.

Источник: http://csharphelper.com/blog/2017/08/animate-rainbow-colors-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Adblock
detector