Java 选择图像的一个区域
我需要一种方法从图像中选择一个矩形区域(从Java 选择图像的一个区域,java,image,user-interface,Java,Image,User Interface,我需要一种方法从图像中选择一个矩形区域(从buffereImage到JLabel)。 当用户选择一个区域时,我需要保存矩形的四个点(像素位置) 如何使用Java实现此功能? 是否有现成的组件?要选择缓冲区图像的区域,只需执行以下操作: BufferedImage newImage = yourImage.getSubimage(x, y, width, height); 调整代码并提供参数x、y、宽度和高度,以定义矩形 重要提示:新图像将链接到原始图像!如果您更新了一个,那么另一个将随之更新
buffereImage
到JLabel
)。当用户选择一个区域时,我需要保存矩形的四个点(像素位置) 如何使用Java实现此功能?
是否有现成的组件?要选择
缓冲区图像的区域,只需执行以下操作:
BufferedImage newImage = yourImage.getSubimage(x, y, width, height);
调整代码并提供参数x
、y
、宽度
和高度
,以定义矩形
重要提示:新图像将链接到原始图像!如果您更新了一个,那么另一个将随之更新
有关更多信息,请参阅
编辑:关于允许用户选择区域的组件,您可以自己做一个简单的;或者在图书馆里搜索一个预先制作好的,比如
如果您选择制作自定义组件,一种方法是:显示原始图像,并要求用户在要提取的矩形的第一个和第二个点上单击
您可以使用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);
要选择缓冲区图像的区域,只需执行以下操作:
BufferedImage newImage = yourImage.getSubimage(x, y, width, height);
调整代码并提供参数x
、y
、宽度
和高度
,以定义矩形
重要提示:新图像将链接到原始图像!如果您更新了一个,那么另一个将随之更新
有关更多信息,请参阅
编辑:关于允许用户选择区域的组件,您可以自己做一个简单的;或者在图书馆里搜索一个预先制作好的,比如
如果您选择制作自定义组件,一种方法是:显示原始图像,并要求用户在要提取的矩形的第一个和第二个点上单击
您可以使用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);
感谢您的帮助,我知道如何执行此步骤,但我需要知道如何从用户选择的图像(在GUI中)捕获矩形点@radi请参见我的编辑。它应该给你一个想法。如果你有任何疑问,告诉我!感谢您的帮助,我知道如何执行此步骤,但我需要知道如何从用户选择的图像(在GUI中)捕获矩形点@radi请参见我的编辑。它应该给你一个想法。如果你有任何疑问,告诉我!