Russian Belarusian English German Japanese Ukrainian

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

CuBook55

У канвы имеются методы копирования. Это прежде всего метод CopyRect, позволяющий копировать прямоугольную область источника изображения в прямоугольную область данной канвы. Метод определен следующим образом:
void __fastcall CopyRect(const Windows::TRect $Dest, TCanvas* Canvas, const Windows::TRect $Source);
Параметр Dest определяет прямоугольную область канвы, в которую производится копирование. Параметр Canvas указывает источник, из которого копируется изображение. Это может быть канва любого компонента: типа TImage, типа TBitmap и др. В частном случае источником может быть и канва того же компонента, в который производится копирование. Параметр Source определяет прямоугольную область в источнике изображения, которая копируется в область Dest. Обе прямоугольные области и в источнике, и в приемнике имеют тип TRect.
 
Копирование - это не просто перенос изображения. В общем случае копирование означает сложное взаимодействие копируемого изображения и того, которое было до этого в области, куда производится копирование. Характер этого взаимодействия определяется параметром CopyMode (режим копирования) той канвы, в которую производится копирование. По умолчанию значение CopyMode равно cmSrcCopy. Это единственный режим, при котором производится действительное копирование: изображение в Dest стирается и заменяется скопированным.
 
Есть два значения - cmWhiteness и cmBlackness, при которых собственно никакое копирование не производится: просто область закрашивается соответственно белым или черным цветом. А все остальные режимы определяют сложное взаимодействие копируемого изображения с тем, которое было в Dest. Особый интерес представляет режим cmSrcInvert, при котором изображения канвы и источника комбинируются, используя булеву операцию XOR. Так же, как для пера, повторное копирование в подобном режиме восстанавливает прежнее изображение на канве. Интересен также режим cmSrcAnd.
 
Если копируемое изображение представляет собой контурный черный рисунок на белом фоне, то этот рисунок наложится на прежнее изображение канвы, а белый фон будет прозрачным, так что под ним будет видно первоначальное изображение. В режиме cmSrcPaint аналогичный эффект будет, если копируемое изображение представляет собой белый контурный рисунок на черном фоне.
 
Еще один метод копирования - BrushCopy. Он сохраняется, как заявляют сами авторы C++Builder, только для совместимости с более ранними версиями системы. Помимо методов копирования свойство CopyMode используется также методом рисования на канве Draw.
 
Пример №1

Операторы обеспечивают копирование изображения фрагмента канвы компонента Image2 в указанную область канвы компонента Image1. Изображение, которое ранее было на канве компонента Image1 в пределах области с координатами углов (0, 0) и (200, 200), просто заменяется новым.
Image1->Canvas->CopyMode = cmSrcCopy;
Image1->Canvas->CopyRect(Rect(0,0,200,200),Image2->Canvas,Rect(0,0,200,200));
 
Пример №2

Операторы обеспечивают копирование изображения фрагмента канвы компонента Image2 в указанную область канвы компонента Image1 в режиме cmSrcInvert. После выполнения функции CopyRect в первый раз изображения в компонентах Image1 и Image2 налагаются друг на друга, а в результате выполнения функции CopyRect во второй раз исходное изображение на канве компонента Image1 восстанавливается.
Image1->Canvas->CopyMode = cmSrcInvert;
Image1->Canvas->CopyRect(Rect(0,0,200,200),Image2->Canvas,Rect(0,0,200,200));
Image1->Canvas->CopyRect(Rect(0,0,200,200),Image2->Canvas,Rect(0,0,200,200));
 
Пример №3

Операторы просто очищают указанную область канвы компонента Image1, закрашивая ее белым цветом. При этом изображение в компоненте Image2 никак не участвует в операциях копирования.
Image1->Canvas->CopyMode = cmWhiteness;
Image1->Canvas->CopyRect(Rect(0,0,200,200),Image2->Canvas,Rect(0,0,200,200));
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий


Защитный код Обновить