Brush — кисть


У канвы имеется свойство Brush — кисть. Это свойство определяет фон и заполнение замкнутых фигур на канве. Brush — это объект, имеющий в свою очередь ряд свойств. Свойство Color определяет цвет заполнения. Свойство Style определяет шаблон заполнения (штриховку).
Имеется еще одно свойство кисти — Bitmap, являющееся указателем на объект типа TBitmap и определяющее нестандартное заполнение заданным шаблоном. Шаблон задается битовой матрицей размером 8 на 8. Если для кисти задан шаблон Bitmap, то заполнение производится именно этим шаблоном, независимо от значения свойства Style.
Шаблон Bitmap может создаваться в процессе выполнения приложения или, например, загружаться из файла, как в приведенном ниже примере, в котором фон формы заполняется загруженным шаблоном:

Graphics::TBitmap *BrushBmp = new Graphics::TBitmap;
try
{
BrushBmp->LoadFromFile(«MyBitmap.bmp»);
Forml->Canvas->Brush->Bitmap = BrushBmp;
Forml->Canvas->FillRect(Rect(0,0,Forml->Width,Forml->Height));
}
_finally
{
Forml->Canvas->Brush->Bitmap = NULL;
delete BrushBmp;
}

В этом примере создается объект BrushBmp типа TBitmap и в него загружается битовая матрица из фала с именем MyBitmap.bmp. Затем свойству Forml->Canvas->Brush->Bitmap присваивается указатель на этот объект. После этого загруженный шаблон можно использовать для заполнения фигур на канве формы. Метод FillRect рисует на канве заполненный шаблоном прямоугольник, занимающий всю площадь формы. Если подобный код вставить в обработчик события формы OnResize, то и при изменении пользователем размеров формы ее поверхность будет вся заполнена шаблоном. После этого (а также в случае генерации каких-то исключений) Bitmap присваивается значение NULL, после чего заполнение опять начинает определяться свойством Style. Затем объект BrushBmp уничтожается, чтобы освободить занимаемую им память.
В приведенном примере использован метод канвы FillRect, объявленный как

void _fastcall FillRect(const Windows::TRect SRect);

Он заполняет заданным стилем или шаблоном прямоугольную область, заданную параметром Rect. Этот параметр имеет тип TRect. Для его задания проще всего использовать функцию Rect(Xl,Yl,X2,Y2), возвращающую структуру Rect с координатами углов, заданных параметрами (XI, Y1) и (Х2, Y2).
Функцию FillRect удобно, в частности, использовать для стирания изображения. Например, оператор

Imagel->Canvas->FillRect(Rect(0,0,Imagel->Width,Imagel->Height));

очищает всю площадь канвы компонента Imagel.

Кисть участвует в заполнении фигур не только с помощью этой функции. Все перечисленные ранее методы рисования замкнутых фигур тоже заполняют их с помощью кисти. Это относится к методам Chord, Ellipse, Pie, Polygon и др.
Имеется еще один интересный метод, работающий с кистью. Это метод FloodFill, который заполняет замкнутую область на канве. Этот метод определен следующим образом:

void _fastcall FloodFill(int X, int Y, TColor Color, TFillStyle FillStyle);

Точка с координатами X и Y является произвольной внутренней точкой заполняемой области, которая может иметь произвольную форму. Граница этой области определяется сочетанием параметров Color и FillStyle. Параметр Color указывает цвет, который используется при определении границы заполняемой области, а параметр FillStyle определяет, как именно по этому цвету определяется граница. Параметр FillStyle может принимать одно из двух следующих значений: fsSurface или fsBorder. Если FillStyle = fsSurface, то заполняется область, окрашенная цветом Color, а на других цветах метод останавливается. Если FillStyle = fsBorder, то наоборот, заполняется область окрашенная любыми цветами, не равными Color, a на цвете Color метод останавливается.
Для определения области закрашивания можно использовать координаты и цвет одного из пикселей, расположенных внутри области (если FillStyle = fsSurface) или снаружи ее (если FillStyle = fsBorder).
Имеется еще один метод канвы, связанный с кистью. Это метод FrameRect. Он рисует на канве текущей кистью прямоугольную рамку, не закрашивая ее, Синтаксис метода FrameRect:

void _fastcall FrameRect(const Windows::TRect SRect);

Параметр Rect определяет позицию и размеры прямоугольной рамки. Толщина рамки — 1 пиксель. Область внутри рамки кистью не заполняется. Метод FrameRect отличается от рассмотренного ранее метода Rectangle тем, что рамка рисуется цветом кисти (в методе Rectangle — цветом пера) и область не закрашивается (в методе Rectangle закрашивается).

Загрузка...