Как получить форму прозрачной части буферного изображения в Java?

#java #awt #graphics2d

#java #awt #graphics2d

Вопрос:

У меня есть BufferedImage объекты изображения, которые имеют прозрачные пиксели. Что я хотел бы получить, так это Shape или Area объекты, которые заключают в себе прозрачную часть изображения.

Комментарии:

1. Один или несколько объектов? То, что вам нужно, — это выпуклая оболочка прозрачных пикселей. Если есть отдельные группы прозрачных пикселей, которые вы хотите изолировать, то решение будет другим.

2. @Rom1 Спасибо за указатель на выпуклую оболочку, было интересно прочитать об этом алгоритме. В моем случае может быть несколько групп прозрачных пикселей.

Ответ №1:

Вы могли бы попробовать это таким образом: обработать исходное изображение как неориентированный граф, узлами которого являются прозрачные пиксели. Поместите границу между соседними узлами на изображении (т. е. прозрачными пикселями, которые находятся непосредственно вверху, слева, справа, внизу и по диагонали). Найдите связанные компоненты для этого графика. Затем для каждого подключенного компонента вычислите его выпуклую оболочку. Возвращает a, List содержащий каждую из этих оболочек, каждая оболочка является Shape .