Выбор области изображения - PullRequest
1 голос
/ 01 мая 2011

Мне нужен метод для выбора прямоугольной области изображения (BufferedImage в JLabel).
Когда пользователь выбирает регион, мне нужно сохранить четыре точки прямоугольника (позиции пикселей).

Как реализовать это с помощью Java?
Есть ли готовый компонент?

1 Ответ

5 голосов
/ 01 мая 2011

Чтобы выбрать область BufferedImage, просто выполните:

BufferedImage newImage = yourImage.getSubimage(x, y, width, height);

Адаптируйте код и предоставьте параметры x, y, width и height для определенияпрямоугольник.

Важно: Новое изображение будет связано с оригиналом!Если вы обновляете один, другой следует.

См. Javadoc для получения дополнительной информации.

РЕДАКТИРОВАТЬ: О компоненте, который позволит пользователю выбрать регион, вы можете сделать простой самостоятельно;или выполните поиск готового в библиотеках, таких как SwingX , ...

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

Вы можете использовать MouseListener, чтобы сохранить положениепользователь нажимает и передает эти параметры getSubimage.Это будет пример:

public class RegionSelectorListener extends MouseAdapter {
    final JLabel label;

    public RegionSelectorListener(JLabel theLabel) {
        this.label = theLabel;
        theLabel.addMouseListener(this);
    }

    Point origin = null;

    public void mouseClicked(MouseEvent event) {
        if (origin == null) { //If the first corner is not set...

            origin = event.getPoint(); //set it.

        } else { //if the first corner is already set...

            //calculate width/height substracting from origin
            int width = event.getX() - origin.x;
            int height = event.getY() - origin.y;

            //output the results (replace this)
            System.out.println("Selected X is: "+ origin.x);
            System.out.println("Selected Y is: "+ origin.y);
            System.out.println("Selected width is: "+ width);
            System.out.println("Selected height is: "+ height);
        }
    }
}

Чтобы использовать его:

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