Creer une BufferedImage sur la fenêtre active
6FoursPlaya
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
tout est plus ou moins dit... Je cherche à créer avec un robot (ou autre solution) une bufferedImage sur ma fenêtre active de mon écran (et non pas de tout l'écran)...
Merci par avance de votre aide
Cordialement,
Greg
tout est plus ou moins dit... Je cherche à créer avec un robot (ou autre solution) une bufferedImage sur ma fenêtre active de mon écran (et non pas de tout l'écran)...
Merci par avance de votre aide
Cordialement,
Greg
A voir également:
- Creer une BufferedImage sur la fenêtre active
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Créer une adresse hotmail - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte instagram sur google - Guide
1 réponse
L'idée du Robot est pas mal, il faut juste lui indiquer de ne prendre que la portion d'écran qui correspond à la fenêtre active. Exemple :
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Test
{
public static void main(String[] args)
{
final JFrame frame = new JFrame();
JButton button = new JButton("Capture");
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
try
{
Robot robot = new Robot();
Dimension size = frame.getSize();
Point pos = frame.getLocationOnScreen();
BufferedImage img = robot.createScreenCapture(new Rectangle(pos.x, pos.y, size.width, size.height));
File tmp = File.createTempFile("awtScreenCapture_", ".png");
ImageIO.write(img, "png", tmp);
Desktop.getDesktop().open(tmp);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(frame, e, e.getClass().getCanonicalName(), JOptionPane.ERROR_MESSAGE);
}
}
});
frame.setSize(200, 200);
frame.add(button);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
merci de ta réponse mais cela ne correspond pas exactement à mon besoin...
Je ne veux pas créer de JFrame et faire une capture sur cette dernière mais par exemple faire une copie d'écran automatique (toutes les 3 sec) sur firefox ou sur un explorateur windows ou autre (la fenêtre qui est active sur mon écran de PC)
Merci par avance
Cdlt,
Greg
Sous Windows tu peux faire comme ça :
import java.awt.Rectangle; import com.sun.jna.Native; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.WinDef.RECT; public class WindowsUtils { private static class User32DLL { static { Native.register("user32"); } public static native HWND GetForegroundWindow(); public static native boolean GetWindowRect(HWND hWnd, RECT lpRect); } public static Rectangle getActiveWindowPosition() { RECT rect = new RECT(); User32DLL.GetWindowRect(User32DLL.GetForegroundWindow(),rect); return new Rectangle(rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top); } }Du coup tu adaptes le code de tout à l'heure comme ceci :
Il faudra bien sûr rajouter les deux jar jna et jna-platform dans ton classpath pour que ça fonctionne.