Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.07.2008, 21:27
Аватар для Vex_TH
Vex_TH Vex_TH вне форума
Прохожий
 
Регистрация: 31.07.2008
Сообщения: 5
Репутация: 10
По умолчанию Копирование участка растрового изображения, заключённого в произвольный многоугольник

Здраствуйте, у меня возникла проблема, вобщем есть определённое изображение, поверх него рисуется произвольный многоугольник, задача - скопировать участок изображения заключённый в этот многоугольник в временной Tbitmap(ну или в поток, это не столь важно). Думаю над реализацией уже второй день, пока ничего нармального не придумал, просьба указать в какую сторону капать, а ещё лучше посмотреть бы исходник в котором такое реализованно
Ответить с цитированием
  #2  
Старый 31.07.2008, 21:36
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Возможен такой подход: с помощью специальных алгоритмов найти все точки внутри многоугольника попутно используя найденные координаты для канваса рисунка. То есть ты узнаешь цвет очередного пикселя и заносишь его в какой нить массив например или сразу рисешь на "чистом" bitmap'е
Ответить с цитированием
  #3  
Старый 31.07.2008, 21:48
Аватар для Vex_TH
Vex_TH Vex_TH вне форума
Прохожий
 
Регистрация: 31.07.2008
Сообщения: 5
Репутация: 10
По умолчанию

ну это то понятно что надо считывать точки из многоугольника, но вот где взять эти специальные алгоритмы о которых вы говорили?)
Единственный вариант какой я придумал - рисовать только грани многоугольника и чистым чёрным цветом, а потом в цикле проверять по линии получившегося изображения - есть чистый чёрный цвет - начинаем копировать с соблюдением координат последующие пиксели, попадается снова чёрный цвет - прекращяем копировать, да. знаю очень топорно и вообще некрасиво, к тому же грань многоугольника может быть горизонтальной(ну в принципе это не столь важно)
Ответить с цитированием
  #4  
Старый 31.07.2008, 21:55
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Если многоугольник невыкуплый, то не подойдет. Эти алгоритмы есть в инете сто пудов, надо просто поискать. "Проверка точки на принадлежность многоугольнику" - там все кучеряво написано, но думаю, разобраться можно.
Ответить с цитированием
  #5  
Старый 25.08.2008, 15:37
Grunch Grunch вне форума
Новичок
 
Регистрация: 08.04.2008
Адрес: Краснодар
Сообщения: 52
Репутация: 10
По умолчанию

Цитата:
Если многоугольник невыкуплый, то не подойдет.
Почему же? Сканируем строчку, встретили черный пиксель - увеличили счетчик. Счетчик нечетный - мы внутри области, копируем. Счетчик нечетный - сканим дальше. Только рисовать этот ограничивающий многоугольник надо цветом которого гарантированно нет на рисунке. И обабатывать ситуацию когда у пиксель является вершиной многоугольника (единственный на строке) или граница многоугольника горизонтальна.
Ответить с цитированием
  #6  
Старый 26.08.2008, 12:24
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

В DirectX это решается с помощью буфера шаблона (stencil)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:59.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025