Алгоритм определения, находится ли пиксель в пределах границы - PullRequest
3 голосов
/ 29 сентября 2010

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

Создание набора изображений достаточно просто, но нам нужен действительно быстрый алгоритм для определения того, какими пикселями следует манипулировать (т. Е. что-то, чтобы определить, какие пиксели находятся в пределах выбора пользователя ).

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

1. Пиксель за пикселем. Мы просто просматриваем каждый пиксель изображения и проверяем, находится ли он в пределах выбора пользователя. Очевидно, это слишком медленно!

2. Использование алгоритма пересечения линии. Тип вещи , замеченный здесь .

3. Заполнение наводнения. Выберите пиксели вдоль пути выделения, а затем выполните заливку в этом выделении. Это может нормально работать.

Это, должно быть, проблема, которая обычно решается, поэтому мы предполагаем, что есть гораздо больше решений, о которых мы даже не думали.

Что бы вы порекомендовали?

Ответы [ 2 ]

4 голосов
/ 29 сентября 2010

Алгоритм заполнения Flood является хорошим выбором.

Посмотрите на эту реализацию:

Линейное заполнение очереди: алгоритм быстрого заполнения

3 голосов
/ 29 сентября 2010

Вы должны иметь возможность использовать свой многоугольник для создания обтравочного контура.Мини-язык для описания полигонов для Silverlight хорошо документирован.

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

Надеюсь, это поможет.Просто выкинуть идеи и посмотреть, есть ли какая-нибудь палка :))

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