Robot.createScreenCapture всегда захватывает несвёрнутое изображение.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Robot.createScreenCapture всегда захватывает несвёрнутое изображение.

Сообщение Anonymous »

Сейчас я пишу код, который выполняет простую обработку изображений. В моем коде нажатие различных кнопок на экране выполняет свертку и/или манипулирует значениями RGB каждого пикселя для отображения различных эффектов, таких как оттенки серого и обнаружение краев.
Я добавил увеличительное стекло функция, позволяющая приблизить определенные части обработанного изображения и вынести их на отдельную панель. Чтобы захватить все, что находится на обработанном изображении, я использовал метод createScreenCapture в классе Robot, чтобы захватить область вокруг курсора мыши. Проблема в том, что увеличенное изображение всегда показывает необработанное исходное изображение вместо обработанного.
Ниже приведен код, который отображает изображения на экране. Я использовал ImageIcon, чтобы изображение поместилось в панели в рамке.
public void showOnScreen(){
ImageIcon originalIcon = new ImageIcon(original_img_panel.loadedImg);
img = originalIcon.getImage();
newimg = img.getScaledInstance(550,550,Image.SCALE_SMOOTH);
originalIcon = new ImageIcon(newimg);
original_img_panel.original_label.setIcon(originalIcon);

//processed image goes through the same process
}

Ниже приведен код, который создает шапку экрана. Он захватывает небольшую прямоугольную область вокруг курсора мыши и сохраняет ее в ZoomPanel.zoomedInImage, а затем рисует ее с параметром current_zoom_perc, установленным пользователем, в ZoomPanel.
public void mouseMoved(MouseEvent e) {
Point mousePoint = e.getPoint();
try {
Robot r = new Robot();
zoomPanel.zoomedInImage = r.createScreenCapture(new Rectangle(mousePoint.x, mousePoint.y, 150, 150));
zoomPanel.zoomedInImage = zoomPanel.zoomedInImage.getScaledInstance((int)(150*current_zoom) ,(int)(150*current_zoom_perc),Image.SCALE_SMOOTH);
zoomPanel.repaint();
}
catch (AWTException ex) {
throw new RuntimeException(ex);
}
}

Пример изображения, которое было обработано с помощью обнаружения краев, а затем увеличено (показано в правом нижнем углу). Увеличенное изображение — это увеличенная версия исходного изображения.
Я не совсем уверен, что здесь можно изменить.. Спасибо!
РЕДАКТИРОВАТЬ: Вот класс ZoomedInPanel, класс объекта ZoomPanel.
public class zoomedInPanel extends JPanel {
JLabel zoomedInLabel = new JLabel();
Image zoomedInImage;
boolean cursorInPanel = false;
public zoomedInPanel() {
setBounds(950,555,150,150);
setLayout(null);
setBackground(Color.WHITE);
zoomedInLabel.setBounds(0,0,150,150);
zoomedInLabel.setBackground(Color.WHITE);
add(zoomedInLabel);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(zoomedInImage, 0, 0, this);
}
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... lved-image
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»