#java #awtrobot
#java #awtrobot
Вопрос:
При нажатии кнопки я реализовал код, при первом нажатии кнопки он получит значение положения x, y, при втором нажатии кнопки он получит значение x1, y1 и захватит изображение. Но каким-то образом это дополнительно добавляет черный фон к исходному изображению. Как я могу избежать этого?
Toolkit tool = Toolkit.getDefaultToolkit();
c ;
Dimension d = tool.getScreenSize();
if(c==1)
{
x = MouseInfo.getPointerInfo().getLocation().x;
y = MouseInfo.getPointerInfo().getLocation().y;
}
if(c==2)
{
int x1= MouseInfo.getPointerInfo().getLocation().x;
int y1= MouseInfo.getPointerInfo().getLocation().y;
Rectangle rect = new Rectangle(x,y,x1,y1);
Robot robot = new Robot();
String J="Screen";
J=J "" i;
//*************
String ext = ".jpg";
String path = loc J ext;
File f = new File(path);
i ;
Thread t1 = new Thread();
t1.sleep(100);
BufferedImage img = robot.createScreenCapture(rect);
// img.createGraphics();
ImageIO.write(img,"jpeg",f);
tool.beep();
c=0;
x=0;
y=0;
x1=0;
y1=0;
}
Комментарии:
1. Я частично отформатировал ваш код, но не могли бы вы, пожалуйста, уделить некоторое время, чтобы он выглядел немного аккуратнее.
2. Смотрите мой новый ответ. Кажется, я нашел вашу проблему.
Ответ №1:
Если это в mouseClicked(MouseEvent event)
методе (в MouseListener
), почему вы используете:
MouseInfo.getPointerInfo().getLocation().x;
Вероятно, вам следует использовать методы на MouseEvent
:
event.getX();
или
event.getXOnScreen();
Возможно, MouseInfo
методы выдают неверные значения.
Комментарии:
1. Кнопка bob = новая кнопка (); bob.addmouseListner(this); я указал вот так при нажатии на кнопку, она указывает только положение кнопки x, y.
2. но мне нужно положение экрана x, y
3. @jcrs, итак, вы, должно быть, внедрили в свой код прослушиватель мыши, чтобы у вас был доступ к
MouseEvent
.4. @jcrs, используйте
event.getXOnScreen();
, чтобы указать местоположение на экране.5. привет, извините, я забыл использовать getXOnScreen();
Ответ №2:
Кажется, я нашел проблему. Конструктор для Rectangle
принимает x
и y
исходное положение, а также height
и a width
. Похоже, вы даете ему 2 балла x / y.
Попробуйте это вместо этого:
int height = Math.max(y - y1, y1 - y);
int width = Math.max(x - x1, x1 - x);
Rectangle rect = new Rectangle(x,y,width, height);
Комментарии:
1. я получил d.getwidth (где измерение d) и разделяю его на (m = d.getwidth-x1), значение, которое я использовал как прямоугольник (x, y, x1-m,), как мудрая высота