Schermafbeeldingen maken met Java

1. Inleiding

In deze tutorial zullen we een paar verschillende manieren bekijken om een ​​screenshot in Java te maken.

2. Een screenshot maken met Robot

In ons eerste voorbeeld gaan we een screenshot maken van het hoofdscherm.

Daarvoor gebruiken we de createScreenCapture () methode van de Robot klasse. Er is een Rechthoek als een parameter die de grenzen voor het screenshot instelt en een BufferedImage voorwerp. De BufferedImage kan verder worden gebruikt om een ​​afbeeldingsbestand te maken:

@Test openbare leegte gegevenMainScreen_whenTakeScreenshot_thenSaveToFile () gooit uitzondering {Rectangle screenRect = nieuwe rechthoek (Toolkit.getDefaultToolkit (). GetScreenSize ()); BufferedImage capture = nieuwe Robot (). CreateScreenCapture (screenRect); Bestand imageFile = nieuw bestand ("single-screen.bmp"); ImageIO.write (capture, "bmp", imageFile); assertTrue (imageFile .exists ()); }

De afmetingen van het scherm zijn toegankelijk via de Toolkit class door zijn getScreenSize () methode. Op systemen met meerdere schermen wordt standaard het primaire beeldscherm gebruikt.

Na het vastleggen van het scherm in BufferedImage, we kunnen het naar het bestand schrijven met ImageIO.write (). Hiervoor hebben we twee extra parameters nodig. Het afbeeldingsformaat en het afbeeldingsbestand zelf. In ons voorbeeld we gebruiken de.bmp formaat, maar anderen houden van.png, .jpg of .gif zijn ook beschikbaar.

3. Een screenshot maken van meerdere schermen

Het is ook mogelijk om een ​​screenshot van meerdere beeldschermen tegelijk te maken. Net als bij het vorige voorbeeld kunnen we de createScreenCapture () methode van de Robot klasse. Maar deze keer moeten de grenzen van de schermafbeelding alle vereiste schermen beslaan.

Om alle displays te krijgen, gebruiken we de Grafische omgeving klasse en zijn getScreenDevices () methode.

Vervolgens gaan we de grens van elk afzonderlijk scherm ophalen en een Rechthoek die allemaal passen:

@Test openbare leegte gegevenMultipleScreens_whenTakeScreenshot_thenSaveToFile () gooit uitzondering {GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); GraphicsDevice [] schermen = ge.getScreenDevices (); Rectangle allScreenBounds = nieuwe Rectangle (); voor (GraphicsDevice-scherm: schermen) {Rectangle screenBounds = screen.getDefaultConfiguration (). getBounds (); allScreenBounds.width + = screenBounds.width; allScreenBounds.height = Math.max (allScreenBounds.height, screenBounds.height); } BufferedImage capture = nieuwe Robot (). CreateScreenCapture (allScreenBounds); Bestand imageFile = nieuw bestand ("all-screens.bmp"); ImageIO.write (capture, "bmp", imageFile); assertTrue (imageFile.exists ()); }

Tijdens het itereren over de schermen, sommen we altijd de breedtes op en kiezen we slechts één maximale hoogte, aangezien de schermen horizontaal aaneengeschakeld worden.

Als we verder gaan, moeten we de screenshot-afbeelding opslaan. Net als in het vorige voorbeeld kunnen we de ImageIO.write () methode.

4. Een screenshot maken van een bepaalde GUI-component

We kunnen ook een screenshot maken van een bepaalde UI-component.

De afmetingen zijn gemakkelijk toegankelijk via de getBounds () methode aangezien elk onderdeel zich bewust is van zijn grootte en locatie.

In dit geval gaan we de Robot API. In plaats daarvan gaan we de verf() methode van de Component klasse die de inhoud rechtstreeks naar het BufferedImage:

@Test openbare leegte gegevenComponent_whenTakeScreenshot_thenSaveToFile (Component component) genereert Uitzondering {Rechthoek componentRect = component.getBounds (); BufferedImage bufferedImage = nieuwe BufferedImage (componentRect.width, componentRect.height, BufferedImage.TYPE_INT_ARGB); component.paint (bufferedImage.getGraphics ()); Bestand imageFile = nieuw bestand ("component-screenshot.bmp"); ImageIO.write (bufferedImage, "bmp", imageFile); assertTrue (imageFile.exists ()); }

Nadat we de component gebonden hebben, moeten we het BufferedImage. Hiervoor hebben we de breedte, hoogte en afbeeldingstype nodig. In dit geval gebruiken we BufferedImage.TYPE_INT_ARGB wat verwijst naar een 8-bits kleurenafbeelding.

We gaan dan verder om het verf() methode om de BufferedImage en hetzelfde als in eerdere voorbeelden, we slaan het op in een bestand met ImageIO.write () methode.

5. Conclusie

In deze zelfstudie hebben we verschillende manieren geleerd om schermafbeeldingen te maken met Java.

Zoals altijd is de broncode met alle voorbeelden in deze tutorial beschikbaar op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found