Сделайте движущийся фон в 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.