Как я могу избавиться от черного фона на изображениях, снятых с помощью робота?

#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,), как мудрая высота