Nano Hash - криптовалюты, майнинг, программирование

Как выбрать, отобразить и сохранить области изображения?

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

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

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

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

19.08.2010

Ответы:


1

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

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

23.08.2010
  • Хорошо, в этом ответе была самая полезная информация для меня, так что вы получите награду. Спасибо! :) 29.08.2010
  • Ах да, я раньше не назначал наград по новой системе. Спасибо за наводку! :) 29.08.2010

  • 2

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

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

    25.08.2010

    3

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

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

    22.08.2010
  • Я вижу, что сейчас есть награда. Не могли бы вы прокомментировать мой ответ? 27.08.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..