Как я могу вырезать изображение с помощью цветного рисунка? - PullRequest
2 голосов
/ 05 мая 2010

Я разрабатываю небольшую программу, которая обрезает изображения по цвету.

Это будет проще всего объяснить, используя этот пример изображения:

black with a purple splotch of color

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

У кого-нибудь есть идеи? Я использую Java 2D, поэтому я думаю, что мне нужно создать объект "Shape" с фиолетовой областью первого изображения.

Ответы [ 2 ]

5 голосов
/ 05 мая 2010

Если изображение буквально похоже на то, которое вы показываете, вы можете:

  • загрузить изображение в BufferedImage (с ImageIO.read ())
  • создайте новый BufferedImage того же размера, гарантируя, что он имеет альфа-слой (например, установите его тип в BufferedImage.TYPE_4BYTE_ABGR)
  • «вручную», проходя каждый пиксель по очереди в загруженном BufferedImage, получая цвет пикселя с помощью getRGB () и проверяя, черный ли он
  • если цвет черный, установите соответствующий пиксель прозрачным в новом изображении, в противном случае - исходный цвет первого изображения (см. Метод setRGB ())
  • сохранить новое изображение (с ImageIO.write ())

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

2 голосов
/ 05 мая 2010

Вам нужно использовать некоторый алгоритм заливки, который находит границы фиолетовой области:

В Википедии есть страница с отличным псевдокодом и анимацией.

http://en.wikipedia.org/wiki/Flood_fill

...