选择图像的区域

时间:2011-05-01 17:22:47

标签: java image user-interface

我需要一种方法从图像中选择一个矩形区域(BufferedImageJLabel)。
当用户选择一个区域时,我需要保存矩形的四个点(像素位置)。

如何使用Java实现这一点?
是否有现成的组件?

1 个答案:

答案 0 :(得分:5)

要选择BufferedImage的区域,请执行以下操作:

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

调整代码并提供参数xywidthheight以定义矩形。

重要提示:新图片将链接到原始图片!如果您更新一个,则另一个更新。

有关详细信息,请参阅Javadoc


编辑:关于允许用户选择区域的组件,您可以自己做一个简单的组件;或者在SwingX,...等库中搜索预制的。

如果您选择制作自定义组件,则方法是:显示原始图片并要求用户点击 第一次第二< / strong>要提取的矩形点。

您可以使用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);