Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Graphics.doc
Скачиваний:
20
Добавлен:
16.11.2019
Размер:
3.1 Mб
Скачать

Использование горизонтальных линейных градиентов

  • Передайте непрозрачный красный и непрозрачный синий цвета в качестве соответственно третьего и четвертого аргументов.

----------

В предыдущем примере цветовые компоненты линейно меняются по мере увеличения горизонтальной координаты от 0 до 200. Например, для точки с первой координатой, соответствующей середине этого диапазона от 0 до 200, синий компонент будет находиться в середине цветового диапазона от 0 до 255.

Интерфейс GDI+ позволяет настраивать способ градиентного изменения цвета при движении от одного края к другому. Предположим, требуется создать градиентную кисть, меняющую цвет от черного к красному согласно следующей таблице.

Горизонтальная координата

RGB-компоненты

0

(0, 0, 0)

40

(128, 0, 0)

200

(255, 0, 0)

Обратите внимание, что красный компонент имеет половинную интенсивность, когда горизонтальная координата составляет только 20 процентов пути от 0 до 200.

The following example sets the Blend property of a LinearGradientBrush object to associate three relative intensities with three relative positions. As in the preceding table, a relative intensity of 0.5 is associated with a relative position of 0.2. The code fills an ellipse and a rectangle with the gradient brush.

The following illustration shows the resulting ellipse and rectangle.

To customize linear gradients

  • Pass in the opaque black and opaque red as the third and fourth argument, respectively.

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);

В следующем примере устанавливается свойство Blend объекта LinearGradientBrush для привязки трех относительных интенсивностей к трем относительным положениям. Как и в предыдущей таблице, относительная интенсивность 0,5 соответствует относительному положению 0,2. Этот код служит для заливки эллипса и прямоугольника красным цветом с градиентом.

Окончательный вид эллипса и прямоугольника после заливки представлен на следующем рисунке.

Настройка линейных градиентов

  • Передайте непрозрачный черный и непрозрачный красный цвета в качестве соответственно третьего и четвертого аргументов.

-----------------

The gradients in the preceding examples have been horizontal; that is, the color changes gradually as you move along any horizontal line. You can also define vertical gradients and diagonal gradients.

The following example passes the points (0, 0) and (200, 100) to a LinearGradientBrush constructor. The color blue is associated with (0, 0), and the color green is associated with (200, 100). A line (with pen width 10) and an ellipse are filled with the linear gradient brush.

The following illustration shows the line and the ellipse. Note that the color in the ellipse changes gradually as you move along any line that is parallel to the line passing through (0, 0) and (200, 100).

To create diagonal linear gradients

  • Pass in the opaque blue and opaque green as the third and fourth argument, respectively.

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);

В предыдущих примерах градиенты являлись горизонтальными, т. е. цвет плавно менялся при движении вдоль любой горизонтальной линии. Можно также задавать вертикальные и диагональные градиенты.

В следующем примере точки (0, 0) и (200, 100) передаются конструктору LinearGradientBrush. С точкой (0, 0) связан синий цвет, а с точкой (200, 100) — зеленый. Линия (с толщиной пера 10) и эллипс заливаются с помощью кисти линейного градиента.

На следующем рисунке представлены линия и эллипс. Следует обратить внимание на то, что цвет эллипса плавно меняется вдоль любой линии, параллельной прямой, проходящей через точки (0, 0) и (200, 100).