Методы для работы с областью
Холст поддерживает несколько методов рисования, использующих структуру TRect. Как вы помните, TRect представляет собой запись, описывающую координаты верхнего левого и правого нижнего углов прямоугольной области:
typeTRect = record caseInteger of0: (Left, Top, Right, Bottom: Integer);
1: (TopLeft, BottomRight: TPoint);end;
Обычное копирование прямоугольника Source с холста Canvas осуществляет
процедура:
procedureCopyRect(Dest: TRect; Canvas: TCanvas; Source: TRect);
Результат копирования помещается в прямоугольник Dest. Изменяя размерность прямоугольника-получателя, можно получить эффект увеличения или уменьшения изображения. Скопировать прямоугольник Source из битовой карты Bitmap в прямоугольник Dest поможет процедура:
procedureBrushCopy(constDest: TRect; Bitmap: TBitmap; constSource: TRect; Color: TColor);
Особенность метода в том, что при копировании цвет Color заменяется на текущий цвет кисти. Этот нюанс позволяет рисовать прозрачную картинку.
Для этого достаточно заменить фоновый цвет копируемого изображения на фоновый цвет холста.
varBitmap: TBitmap; Rect1, Rect2: TRect; sFileName: string;
Begin
sFileName:= . . .;
Rect1 := Rect(0,0,100,100); Rect2 := Rect(110,0,310, 200);
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile(sFileName);
Form1.Canvas.Brush.Color:=Form1.color;
Form1.Canvas.BrushCopy(Rect1, Bitmap, Rect1, clWhite);
Form1.Canvas.CopyRect(Rect2,Bitmap.Canvas,Rect1);
Bitmap.Free;
end;
В листинге продемонстрирован пример использования функций BrushCopy() и CopyRect(). Метод BrushCopy() размещает на холсте растровую картинку из файла sFileName, причем фоновый цвет Bitmap замещается фоновым цветом кисти холста. Метод CopyRect() копирует изображение в прямоугольник вдвое большего размера, чем достигается эффект увеличения.
Способ наложения изображения на холст определяется свойством CopyMode. По умолчанию режим копирования «один в один» – cmSrcCopy.
Заливку области Rect текущей кистью осуществляет метод:
procedureFillRect(constRect: TRect);
Контур толщиной 1 пиксел для области Rect нарисует процедура FrameRect(), причем оконтуривание осуществляется текущей кистью:
procedureFrameRect(constRect: TRect);
Эффект наличия фокуса ввода на прямоугольнике Rect обеспечивает метод:
procedureDrawFocusRect(constRect: TRect);
При повторном вызове процедуры фокус ввода снимается, т. е. изображение приводится к первоначальному виду. Заливка текущей кистью любой области (необязательно прямоугольной) осуществляется методом:
procedureFloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle);
typeTFillStyle = (fsSurface, fsBorder);
Заливка начинается с точки (X,Y). Режим заливки определяется значением параметра FillStyle. Если параметр принимает значение fsSurface, заливка прекратится только тогда, когда по соседству с точкой (X,Y) не останется ни одного пиксела с цветом Color. Второй режим (fsBorder) заставляет метод вести себя иначе. Процедура станет закрашивать окрестности точки (X,Y) до тех пор, пока не выйдет на границу с цветом Color. Приведенный ниже листинг демонстрирует способ закрашивания части окружности:
Дата добавления: 2016-03-15; просмотров: 570;