Графика и мультимедиа___________________________________345

5.1.5.2 Режимы копирования и рисования канвы

Ранее мы рассматривали и использовали копирование одного графического
объекта в другой методом Assign. Однако, у канвы имеются и другие методы копи-
рования. Это прежде всего метод CopyRect, позволяющий копировать прямоуголь-
ную область источника изображения в прямоугольную область данной канвы. Ме-
тод определен следующим образом:

void   fastcall CopyRect(const Windows::TRect &Dest,

TCanvas* Canvas, const Windows::TRect SSource);

Параметр Dest определяет прямоугольную область канвы, в которую произво-
дится копирование. Параметр Canvas указывает источник, из которого копирует-
ся изображение. Это может быть канва любого компонента: типа TImage, типа
TBitmap и др. В частном случае источником может быть и канва того же компо-
нента, в который производится копирование. Параметр Source определяет прямо-
угольную область в источнике изображения, которая копируется в область Dest.
Обе прямоугольные области и в источнике, и в приемнике имеют тип TRect. В раз-
деле 5.1.3.4 этот тип и работающая с ним функция Rect уже были рассмотрены.

Копирование — это не просто перенос изображения. В общем случае копирова-
ние означает сложное взаимодействие копируемого изображения и того, которое
было до этого в области, куда производится копирование. Характер этого взаимо-
действия определяется параметром CopyMode (режим копирования) той канвы, в
которую производится копирование. Вы можете в справочной части книги в главе
15 посмотреть 15 различных значений этого параметра. По умолчанию значение
CopyMode равно cmSrcCopy. Это единственный режим, при котором производится
действительное копирование: изображение в Dest стирается и заменяется скопиро-
ванным. Есть два значения — cmWhiteness и cmBlackness, при которых собствен-
но никакое копирование не производится: просто область закрашивается соответ-
ственно белым или черным цветом. А все остальные режимы определяют сложное
взаимодействие копируемого изображения с тем, которое было в Dest. Особый ин-
терес представляет режим cmSrdnvert, при котором изображения канвы и источ-
ника комбинируются, используя булеву операцию XOR. Так же, как мы видели
это для пера, повторное копирование в подобном режиме восстанавливает прежнее
изображение на канве. Интересен также режим cmSrcAnd. Если копируемое изоб-
ражение представляет собой контурный черный рисунок на белом фоне, то этот ри-
сунок належится на прежнее изображение канвы, а белый фон будет прозрачным,
так что под ним будет видно первоначальное изображение. В режиме cmSrcPaint
аналогичный эффект будет, если копируемое изображение представляет собой бе-
лый контурный рисунок на черном фоне.

Приведем примеры копирования в различных режимах. Операторы

Imagel->Canvas->CopyMode = cmSrcCopy;

Imagel->Canvas->CopyRect(Rect(0,0,200,200),Image2->
Canvas,Rect(0,0,200,200));

обеспечивают копирование изображения фрагмента канвы компонента Image2 в
указанную область канвы компонента Imagel. Изображение, которое ранее было
на канве компонента Imagel в пределах области с координатами углов (0, 0) и
(200, 200), просто заменяется новым.
Операторы

Imagel->Canvas->CopyMode = cmSrdnvert;

Imagel->Canvas->CopyRect(Rect(0,0,200,200),Image2->
Canvas,Rect(0,0,200,200)) ;

Imagel->Canvas->CopyRect(Rect(0,0,200,200),Image2->
Canvas,Rect(0,0,200,200));