Рисование непрямоугольной части рисунка на холсте delphi - PullRequest
1 голос
/ 22 июля 2010

Может ли кто-нибудь поделиться примером кода для рисования непрямоугольной части изображения в delphi canvas?

Ответы [ 4 ]

2 голосов
/ 22 июля 2010

Вы ищете пути GDI. Начните с здесь , который объясняет, что пути в этом контексте, и предоставляет ссылки слева, чтобы объяснить функциональность, доступную с ними.

Google может привести множество примеров использования путей в Delphi. Если вы не можете их найти, оставьте комментарий здесь, и я посмотрю, что я могу для вас найти.

2 голосов
/ 22 июля 2010

Ваш вопрос довольно расплывчатый. Но я подозреваю, что вы ищете отсечение регионов. Читайте о них. Установите область отсечения на целевом устройстве в нужную вам форму, а затем нарисуйте изображение на устройстве. Будет нарисована только та часть изображения, которая будет в области отсечения.

1 голос
/ 22 июля 2010
Canvas.Ellipse(0, 0, 10, 20); // not a rectangle
0 голосов
/ 22 июля 2010

Я использую так называемые списки выполнения для этой функции (обобщенные фигуры и их блиттинг). Я тоже видел их как варплисты. Форма кодируется как список выполнения, определяя его как набор горизонтальных линий, и каждая строка имеет два целочисленных значения (пропустить n пикселей, скопировать n пикселей).

Это означает, что вы можете рисовать целые линии, оставляя вам только операции рисования «по высоте».

Итак, прямоугольник определен (первые «пропускают» пиксели от верхнего уровня до левого угла (xorg, yorg). Прямоугольник width_rect wide, а width_pixels идет дальше на строку. Width_pixels может быть шире ширины картинка (байты выравнивания)

(yorg*width_pixels+xorg  , width_rect),
(width_pixels-width_rect , width_rect),
(width_pixels-width_rect , width_rect),
(width_pixels-width_rect , width_rect),
..
..

Таким образом, вы можете сделать свои процедуры рисования довольно общими, а для простых, правильных форм (ребра, круги) требуется лишь небольшая математика для пересчета этих списков. Это значительно упростило мою форму.

Однако я рисую прямо на растровые изображения, а не на холсты, поэтому я не могу помочь с этой частью. Примитива, который эффективно рисует строку, и способа извлечь строку из графики должно быть достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...