Screenshot mit Maus

klose010

Mitglied
Hallo zusammen,

ich weiß wie ich einen Screenshot mit Java mache:

Java:
Robot robot = new Robot();
BufferedImage bi=robot.createScreenCapture(new Rectangle(breite,hoehe));

Leider ist bei diesem Screenshot keine maus zu sehen. Wie kann ich einen Screenshot mit Maus machen. Meine erste überlegung war die Mausposition abfragen und nachträglich nachmalen, nur gibt es dabei zwei probleme. Zum einen werden bei spielen oft andere mousecourser mit speziellen texturen verwendet, und zum anderen gibt es immer ein leichtes flackern des mousecourser beim screenshot, da dieser ja für einen bruchteil einer sekunde ausgeblendet wird. Ich würde das gerne verhindern.
 
Glaube das funktioniert nicht wirklich von Haus aus (kann mich auch täuschen).
Ich würde einfach die Position des Cursors, beim erstellen des Screenshots, abfragen und dann auf dem Screenshot ein Bild von einem Cursor, auf der abgefragten Position, einfügen.
 
Habe vor langer Zeit mal eine eigene ScreenCapture Klasse geschrieben, die mir high-quality Bilder liefert und bei Bedarf auch skaliert. RenderingHints hab ich ausprobiert, so liefern sie mir persönlich die besten Bilder.

Java:
...

            Robot b = new Robot();
            Rectangle captureSize = new Rectangle(0, 0, w, h);
            this.screenshot = b.createScreenCapture(captureSize);

...

this.screenshot = new ImageScaler().scaleImage(screenshot, Toolkit.getDefaultToolkit().getScreenSize());

....



private BufferedImage scaleImage(BufferedImage img, Dimension d) {
        float factor = getFactor(img.getWidth(), img.getHeight(), d);

        int w = (int) (img.getWidth() * factor);
        int h = (int) (img.getHeight() * factor);
        BufferedImage scaled = new BufferedImage(w, h,
                BufferedImage.TYPE_INT_RGB);

        Graphics2D g = scaled.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g.drawImage(img, 0, 0, w, h, null);
        g.dispose();
        return scaled;
}

float getFactor(int width, int height, Dimension dim) {
        float sx = dim.width / (float) width;
        float sy = dim.height / (float) height;
        return Math.min(sx, sy);
    }

Kleiner Auschnitt, damit solltest du voran kommen.
 
Zuletzt bearbeitet:

Zurück
Oben