java - 选择图像区域

标签 java image user-interface

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

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

最佳答案

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

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

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

重要提示:新图像将与原始图像链接!如果您更新一个,另一个也会随之更新。

参见 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);

关于java - 选择图像区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850043/

相关文章:

html - 将 div 定位到不同 div 的底部,而不使用 Absolute

sql - 日期范围 : inclusive vs strict boundaries

user-interface - 使用 wrap_content 设置文本框的大小

user-interface - Titanium 开发人员的 GUI 生成器

javascript - 传递图像数组值并更改图像源 onclick

java - Spring Security 是否需要使用 Spring Session?

java - 使用显示标签导出到 Excel 时如何删除单选按钮?

Java模板问题

java - 使用 Firebase 根据 1 个属性检索整个对象?

php - 如何防止用户下载或保存图像?