Сделайте движущийся фон в C#

В этом примере отображается текст с движущимся цветовым градиентом. Следующий ShadeRect метод содержит наиболее интересный код программы.

// Заполните прямоугольник градиентом, который
// оттенки от красного до белого до красного.
private void ShadeRect(Graphics gr, float xmin, float xmax)
{
    using (LinearGradientBrush br = new LinearGradientBrush(
        new PointF(xmin, 0), new PointF(xmax, 0),
        Color.Red, Color.Red))
    {
        br.WrapMode = WrapMode.Tile;
        ColorBlend color_blend = new ColorBlend();
        color_blend.Colors =
            new Color[] { Color.Red, Color.White, Color.Red };
        color_blend.Positions = new float[] { 0, 0.5f, 1 };

        br.InterpolationColors = color_blend;
        gr.FillRectangle(br, ClientRectangle);
    }
}

Этот метод заполняет PictureBox программой линейную градиентную кисть, которая начинается с xmin и заканчивается на xmax. Код создает кисть, указывая, что она должна начинаться с точки (xmin, 0) и заканчиваться в точке (xmax, 0). Щетка первоначально оттеняет от красного до красного.

Внутри блока с использованием код устанавливает свойство WrapMode кисти> Tile. (На самом деле это значение по умолчанию, поэтому вы можете опустить этот оператор, если хотите. Я ввел его для ясности.) Это значение заставляет кисть повторять, если необходимо, заполнять все заполненные области. В этом примере кисть повторяется по ширине PictureBox независимо от того, где начинается и останавливается определение кисти.

Затем создайте новый объект ColorBlend, чтобы определить, как цвета смешиваются по заполненной области. Он устанавливает свойства Colors и Positions, поэтому оттенки кисти от красного (на левом краю) до белого (посередине) и обратно до красного (на правом краю) .

Наконец, код устанавливает свойство щетки InterpolationColors в ColorBlend, а затем заполняет его PictureBox.

Форма программы содержит Timer. Его обработчик событий Tick обновляет PictureBox, чтобы выполнить обработчик события Paint.

private float GradientStart = 0;
private float Delta = 5f;

// Нарисуем фон с текстом сверху.
private void picCanvas_Paint(object sender, PaintEventArgs e)
{
    // Затенение фона.
    int wid = picCanvas.ClientSize.Width;
    ShadeRect(e.Graphics, GradientStart, GradientStart + wid);

    // Увеличьте начальную позицию.
    GradientStart += Delta;
    if (GradientStart >= wid) GradientStart = 0;

    // Нарисуем какой-то текст.
    using (Font font = new Font("Times New Roman",
        16, FontStyle.Bold))
    {
        using (StringFormat string_format = new StringFormat())
        {
            string_format.Alignment = StringAlignment.Center;
            string_format.LineAlignment = StringAlignment.Center;
            e.Graphics.DrawString("Moving Gradient",
                font, Brushes.Black,
                picCanvas.ClientSize.Width / 2,
                picCanvas.ClientSize.Height / 2,
                string_format);
        }
    }
}

Этот обработчик событий получает ширину объекта PictureBox. Затем он вызывает ShadeRect, чтобы заполнить PictureBox. Он начинает градиент со значением GradientStart и делает его таким же широким, как PictureBox. Поскольку кисть имеет WrapMode, установленную в Tile, она повторяется по мере необходимости, чтобы заполнить любой из PictureBox слева от начала кисти.

Далее код добавляет Delta в GradientStart, чтобы начать градиент немного сдвинуться вправо. Если GradientStart больше ширины PictureBox, программа сбрасывает ее на 0, чтобы она начиналась.

Код заканчивается путем рисования текста «Moving Gradient» в середине PictureBox.

Источник: http://csharphelper.com/blog/2015/12/draw-a-background-with-a-moving-color-gradient-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector