Как выбрать, отобразить и сохранить области графики? - PullRequest
3 голосов
/ 19 августа 2010

Итак, вот ситуация: мне нужно взять (указанный пользователем) рисунок и позволить пользователю определять и маркировать области внутри этого графика. Например, если вы загрузили изображение лица, вы можете определить «правый глаз», «левый глаз», «нос» и т. Д. Кроме того, определив регионы, если я выберу ранее определенную область, это должно быть выделено на изображении как-то. Эти области (очевидно) не обязательно прямоугольные, и они не могут перекрываться. И если вы нажмете в пределах определенной области на графике, я смогу определить, в какой области была нажата кнопка.

Есть несколько способов, которые я могу придумать для этого, но ни один из них не является вполне удовлетворительным. Другой разработчик до меня пытался сделать это с прозрачной сеткой, наложенной на исходную графику, используя фоновый альфа / цвет для выделения областей, но я думаю, что они скорее запутали это. Я мог либо испачкать руки, пытаясь очистить их код, либо попробовать совершенно новый подход.

Что бы вы предложили для максимальной скорости и удобства?

Добавлена ​​награда: за лучшее решение, которое поможет мне заработать за минимальное время.

Ответы [ 3 ]

2 голосов
/ 24 августа 2010

Класс GraphicsPath создан для этого. Держите их список вместе с изображением. Сначала нарисуйте изображение, затем Graphics.DrawPath (), чтобы нарисовать области сверху изображения.

Тестирование попаданий просто с GraphicsPath.IsVisible (). Повторяйте список в обратном порядке, чтобы перекрытия работали.

1 голос
/ 25 августа 2010

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

Однако, если вы до сих пор не использовали WPF или Silverlight, есть некоторые трудности в изучении основных концепций и API;поэтому я боюсь, что нет никакого реального способа рекомендовать его как решение с максимальной скоростью, не зная ваших (или тех, кто будет над этим работать) компетенций.Тем не менее, использование MVVM и WPF определенно будет решением для максимальной скорости для меня.Кроме того, максимальное удобство для пользователя, так как WPF позволяет создавать довольно интересные модели взаимодействия из коробки, такие как поддержка мультитач (это модная вещь, о которой следует упомянуть, верно?) И простая нестандартная компоновка и размещение элементов управления.

0 голосов
/ 23 августа 2010

Вам нужны полигоны, сохраненные в виде списка точек.И вам нужно тестирование удара для них.Смотрите ссылку:

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/40ebadc1-6154-4c7c-9cb1-d608a426b29c

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