Главная » WPF » Градиентные кисти

0

Кисти  LinearGradientBrush и RadialGradientBrush (рис.  5.6) позволяют  осу ществлять градиентную  заливку.  LinearGradientBrush применяет алгоритм  сме шения цветов вдоль вектора, а RadialGradientBrush – радиально,  начиная  с ука занной точки.

Рис. 5.6. Основные атрибуты градиентных кистей двух типов

Рис. 5.7. Эффекты применения различных атрибутов RadialGradientBrush

Работа  с кистью RadialGradientBrush осложняется из за взаимодействия че тырех свойств: GradientOrigin, Center, RadiusX и RadiusY. Последние три опреде ляют  эллипс,  внутри  которого  применяется градиент.  Свойство  GradientOrigin интерпретируется довольно странно; оно говорит, где должна находиться  фокус ная точка градиента. Если расположить фокус вне границ эллипса, то мы полу

чим очень необычные изображения. На рис. 5.7 показано, как задание разных зна чений этих свойств влияет на заливку  кистью RadialGradientBrush. В каждом примере прямоугольник залит градиентно и обведен черной кистью. В последнем случае (All) показано, что фокусная точка градиента может лежать за пределами элемента.

Для  управления градиентом  есть много возможностей, но помимо  уже рас смотренных  выше интерес представляет еще лишь свойство SpreadMethod. Оно определяет,  что должно происходить,  когда мы достигаем конца градиента. Если задать значение  по умолчанию  Pad, то будет взята  последняя точка градиента  и этим цветом закрашена  оставшаяся часть фигуры.  Значение Reflect создает зер кальное отражение  градиентной  заливки,  а значение Repeat  просто повторяет  ее. На  рис. 5.8 показано,  как с помощью  свойства  SpreadMethod можно  создавать сложные изображения.

Рис. 5.8. Применение разных значений свойства SpreadMethod к радиальной и линейной градиентным кистям

Для  кистей  любого вида  надо понимать,  для  чего нужно  свойство MappingMode. С его помощью мы можем растянуть  кисть, так чтобы она запол нила всю область, или оставить фиксированный размер. Если MappingMode рав но Absolute, то размер кисти фиксирован. Чтобы растянуть  градиент, следует за дать значение RelativeToBoundingBox; оно означает, что система координат опре делена относительно охватывающего  прямоугольника. Это пространство  разби вается на части путем задания  числа от 0.0 до 1.0. На рис. 5.9 показано несколько примеров  применения свойства MappingMode.

Рис. 5.9. Сравнение режимов отображения RelativeToBoundingBox и Absolute

Рис. 5.10. Рамка окна в стиле Windows XP крупным планом

У градиентных  кистей есть свойство MappingMode, которое управляет  общим поведением  кисти. Свойства  GradientStop всегда задаются относительно области, которая  заливается градиентом  (аналогично RelativeToBoundingBox). Чтобы  по нять, почему это так важно, рассмотрим создание рамки окна в стиле Windows XP (рис. 5.10). Верхняя полоса закрашена градиентной кистью фиксированного разме ра и имеет скругленные углы. Для достижения такого эффекта мы можем восполь зоваться элементом управления Border с кистью LinearGradientBrush (рис. 5.11):

<Border CornerRadius=’5,5,0,0’ BorderBrush=’#FF0144D0’ BorderThickness=’1’

<Border.Background>

<LinearGradientBrush

MappingMode=’Absolute’ StartPoint=’0,0’ EndPoint=’0,24’

<LinearGradientBrush.GradientStops>

<GradientStop Offset=’0’ Color=’#FF0058EB’ />

<GradientStop Offset=’0.03’ Color=’#FF3D95FF’ />

<GradientStop Offset=’.06’ Color=’#FF2B90FF’ />

<GradientStop Offset=’.4’ Color=’#FF0055E5’ />

<GradientStop Offset=’.6’ Color=’#FF0055E5’ />

<GradientStop Offset=’.9’ Color=’#FF036EFF’ />

<GradientStop Offset=’1’ Color=’#FF0144D0’ />

</LinearGradientBrush.GradientStops>

</LinearGradientBrush>

</Border.Background>

<Rectangle Fill=’White’ Margin=’2,24,2,2’ />

</Border>

 Рис. 5.12. Применение свойств Viewbox, Viewport и TileMode для заливки частью су

ществующего изображения

Обратите  внимание,  что опорная  точка градиента  GradientStop вычисляется относительно охватывающего  прямоугольника кисти, который  был определен  в

абсолютных  координатах:  от (0,0)  до (0,24).  Это  означает,  что вторая  опорная точка находится  на расстоянии, равном  0.03 от 24, то есть отстоит примерно  на

0.72 пикселя  от верхней границы.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии