Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




 

У пера Реn имеется еще одно свойство, которое мы пока не рассматривали. Это | свойство — Mode (режим). По умолчанию значение Mode = pmCopy. Это означает, что линии проводятся цветом, заданным в свойстве Color. Но возможны и другие ре­жимы, в которых учитывается не только цвет Color, но и цвет соответствующих пикселей фона. Наиболее интересным из этих режимов является режим pmNotХоr — сложение с фоном по инверсному исключающему ИЛИ. Операция инверс­ного исключающего ИЛИ анализирует по битам два своих операнда. Результирую­щий бит равен «0», если соответствующие биты двух операндов не равны друг дру­гу, а при равенстве битов операндов результирующий бит равен «1».

Вспомните, что каждый пиксель хранит цвет как набор битов. Пусть, напри­мер, фоновый пиксель имеет значение 0110011, а цвет пера установлен в 1111000, Применение операции pmNotXor к этим двум числам даст цвет со значением 0110100. Этот цвет перо задаст данному пикселю. А теперь посмотрим, что полу­чится, если перо повторно пройдет по тому же пикселю. В этом случае опять будет выполнена операция pmNotXor по отношению к цвету пера 1111000 и текущему цвету пикселя, который стал равен 0110100. Применение pmNotXor к этим чис­лам даст в результате 0110011, т.е. первоначальный цвет пикселя.

Это значит, что если нарисовать на фоне какую-то фигуру один раз, а затем на­рисовать ту же фигуру повторно, то нарисованная фигура исчезнет и каждый пик­сель вернется к своему первоначальному цвету. Эту особенность режима pmNot­Xor, свойственную также режиму pmХоr — сложение с фоном по исключающему ИЛИ, можно использовать для создания простенькой анимации. Достаточно нари­совать нечто, затем стереть нарисованное, перерисовать немного измененным - и рисунок будет представляться ожившим.

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

procedure CopyRect(Dest: TRect; Canvas: TCanvas; Source: TRect);

Параметр Dest определяет прямоугольную область канвы, в которую произво­дится копирование. Параметр Canvas указывает источник, из которого копирует­ся изображение. Это может быть канва любого компонента: типа TImage, типа TBitMap и др. В частном случае источником может быть и канва того же компо­нента, в который производится копирование. Параметр Source определяет прямо­угольную область в источнике изображения, которая копируется в область Dest.

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

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

ImageI.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));

обеспечивают копирование изображения фрагмента канвы компонента Image2 в указанную область канвы компонента Imagel в режиме cmSrdnvert. После вы­полнения функции CopyRect в первый раз изображения в компонентах Imagel и Image2 налагаются друг на друга, а в результате выполнения функции CopyRect во второй раз исходное изображение на канве компонента Imagel восстанавлива­ется.

Операторы

Imagel.Canvas.CopyMode:= cmWhiteness;

Imagel.Canvas.CopyRect(Rect(0,0,200,200),Image2.Canvas,

Rect (0,0,200,200));

просто очищают указанную область канвы компонента Imagel, закрашивая ее бе­лым цветом. При этом изображение в компоненте Image2 никак не участвует в операциях копирования.

Попробуйте сделать приложение, которое позволяет посмотреть бо­льшинство режимов копирования.

Помимо копирования свойство CopyMode используется также методом рисо­вания на канве Draw. Его описание:

procedure Draw(X, Y: Integer; Graphic: TGraphic);

Метод Draw рисует изображение, содержащееся в объекте, указанном параметром Graphic, сохраняя исходный размер изображения в его источнике и перенося изображение в область канвы объекта, верхний левый угол которой определяется параметрами X и Y. Источник изображения может быть битовой матрицей, пиктограммой или метафайлом. Если источник — объект типа TBitmap, то перенос изображения производится в режиме, установленном свойством канвы СоруMode.




Поделиться с друзьями:


Дата добавления: 2015-03-29; Просмотров: 508; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.