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