Практическое руководство. Создание линейного градиента
GDI+ поддерживает горизонтальные, вертикальные и диагональные линейные градиенты. По умолчанию цвет в линейном градиенте меняется равномерно. Тем не менее можно настроить линейный градиент, таким образом, чтобы цвет меняется образом неоднородной.
В следующем примере заполняется линии, эллипсы и прямоугольник с горизонтальной кисти линейного градиента.
LinearGradientBrush Конструктор принимает четыре аргумента: две точки и два цвета. Первая точка (0, 10) связан с первый цвет (красный цвет), и второй точки (200, 10) связан со вторым цветом (синий). Как и следовало ожидать, линии, соединяющей (0, 10) для (200, 10) плавно меняется от красного к синему.
Вторые точек (50, 10) и (200, 10), не важны. Важно то, что две точки имеют одну координату второй — соединительных линий по горизонтали. Эллипс и прямоугольника также постепенно меняются от красного к синему как горизонтальные координаты от 0 до 200.
Ниже показаны строки, эллипс и прямоугольник. Обратите внимание на то, что цвет градиента, повторяет саму себя как горизонтальная координата выйдет за пределы 200.
Использование горизонтальных линейных градиентов
Передайте непрозрачный синий, красный и непрозрачный как третий и четвертый аргумент, соответственно.
LinearGradientBrush linGrBrush = new LinearGradientBrush( new Point(0, 10), new Point(200, 10), Color.FromArgb(255, 255, 0, 0), // Opaque red Color.FromArgb(255, 0, 0, 255)); // Opaque blue Pen pen = new Pen(linGrBrush); e.Graphics.DrawLine(pen, 0, 10, 200, 10); e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100); e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30);
В предыдущем примере цветовые компоненты линейно меняются при переходе из горизонтальную координату 0 горизонтальную координату 200. Например точки, в которых первая координата на равном расстоянии от 0 до 200 будет иметь синего компонента, который находится на равном расстоянии от 0 до 255.
GDI+ позволяет настраивать цвет меняется в зависимости от одного края градиент другой способ изменения. Предположим, что вы хотите создать градиентную кисть, которая изменяется от черного к красному согласно следующей таблице.
Горизонтальная координата | RGB компонентов |
---|---|
0 | (0, 0, 0) |
40 | (128, 0, 0) |
200 | (255, 0, 0) |
Обратите внимание, что красный компонент имеет половинную интенсивность, когда горизонтальная координата представляет только 20 процентов пути от 0 до 200.
В следующем примере задается Blend свойство LinearGradientBrush объект должен быть сопоставлен три относительный интенсивности три относительные позиции. Как и в предыдущей таблице относительная интенсивность 0,5, связанный с относительное положение 0,2. Код заполняет эллипса и прямоугольник с градиентной кисти.
Ниже показан окончательный вид эллипса и прямоугольника.
Настройка линейных градиентов
Передайте непрозрачный черный и непрозрачный красный как третий и четвертый аргумент, соответственно.
LinearGradientBrush linGrBrush = new LinearGradientBrush( new Point(0, 10), new Point(200, 10), Color.FromArgb(255, 0, 0, 0), // Opaque black Color.FromArgb(255, 255, 0, 0)); // Opaque red float[] relativeIntensities = { 0.0f, 0.5f, 1.0f }; float[] relativePositions = { 0.0f, 0.2f, 1.0f }; //Create a Blend object and assign it to linGrBrush. Blend blend = new Blend(); blend.Factors = relativeIntensities; blend.Positions = relativePositions; linGrBrush.Blend = blend; e.Graphics.FillEllipse(linGrBrush, 0, 30, 200, 100); e.Graphics.FillRectangle(linGrBrush, 0, 155, 500, 30);
Градиенты в предыдущих примерах были по горизонтали; то есть цвет постепенно изменяется при переходе по любой горизонтальной линии. Можно также определить вертикальные и диагональные градиенты.
В следующем примере передается точки (0, 0) и (200, 100), чтобы LinearGradientBrush конструктор. Связан синий цвет (0, 0) и зеленый цвет, связанные с (200, 100). Строки (с помощью пера шириной 10) и эллипс заполняются кисти линейного градиента.
Ниже показаны строки, а также эллипса. Обратите внимание, что цвет эллипса постепенно при переходе по любой строке, — параллельное выполнение на строку, обрабатываемым (0, 0) и (200, 100).
Чтобы создать диагональный линейным градиентом
Передайте непрозрачный синий и непрозрачный зеленый как третий и четвертый аргумент, соответственно.
LinearGradientBrush linGrBrush = new LinearGradientBrush( new Point(0, 0), new Point(200, 100), Color.FromArgb(255, 0, 0, 255), // opaque blue Color.FromArgb(255, 0, 255, 0)); // opaque green Pen pen = new Pen(linGrBrush, 10); e.Graphics.DrawLine(pen, 0, 0, 600, 300); e.Graphics.FillEllipse(linGrBrush, 10, 100, 200, 100);