我需要一种方法从图像中选择一个矩形区域(BufferedImage
到JLabel
)。
当用户选择一个区域时,我需要保存矩形的四个点(像素位置)。
如何使用Java实现这一点?
是否有现成的组件?
答案 0 :(得分:5)
要选择BufferedImage
的区域,请执行以下操作:
BufferedImage newImage = yourImage.getSubimage(x, y, width, height);
调整代码并提供参数x
,y
,width
和height
以定义矩形。
重要提示:新图片将链接到原始图片!如果您更新一个,则另一个更新。
有关详细信息,请参阅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);