Snimanje zaslona pomoću Jave

1. Uvod

U ovom ćemo uputstvu pogledati nekoliko različitih načina snimanja snimke zaslona u Javi.

2. Snimanje zaslona pomoću Robot

U našem prvom primjeru napravit ćemo snimku zaslona glavnog zaslona.

Za to ćemo upotrijebiti createScreenCapture () metoda iz Robot razred. Potrebno je a Pravokutnik kao parametar koji postavlja granice za snimku zaslona i vraća a Slika u baferu objekt. The Slika u baferu može se dalje koristiti za stvaranje slikovne datoteke:

@Test public void givenMainScreen_whenTakeScreenshot_thenSaveToFile () baca izuzetak {Pravokutnik screenRect = novi pravokutnik (Toolkit.getDefaultToolkit (). GetScreenSize ()); BufferedImage capture = novi Robot (). CreateScreenCapture (screenRect); Datoteka imageFile = nova datoteka ("single-screen.bmp"); ImageIO.write (snimanje, "bmp", imageFile); assertTrue (imageFile .postoji ()); }

Dimenzije zaslona dostupne su putem Priručnik klase pomoću svojih getScreenSize () metoda. Na sustavima s više zaslona, ​​primarni zaslon koristi se prema zadanim postavkama.

Nakon snimanja zaslona u BufferedImage, možemo ga zapisati u datoteku pomoću ImageIO.write (). Da bismo to učinili, trebat će nam dva dodatna parametra. Format slike i sama slikovna datoteka. U našem primjeru, koristimo.bmp formatu, ali drugima se sviđa.png, .jpg ili .gif su također dostupni.

3. Snimanje zaslona više zaslona

Također je moguće napraviti snimak zaslona više zaslona odjednom. Kao i u prethodnom primjeru, možemo koristiti createScreenCapture () metoda iz Robot razred. Ali ovaj put granice zaslona moraju pokriti sve potrebne zaslone.

Da bismo dobili sve zaslone, koristit ćemo GrafikaOkolina razreda i svoje getScreenDevices () metoda.

Dalje, dohvatit ćemo rub svakog pojedinog zaslona i stvoriti Pravokutnik koji će stati svima njima:

@Test javna praznina givenMultipleScreens_whenTakeScreenshot_thenSaveToFile () baca izuzetak {GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); GraphicsDevice [] zasloni = ge.getScreenDevices (); Pravokutnik allScreenBounds = novi pravokutnik (); za (zaslon GraphicsDevice: zasloni) {Pravokutnik screenBounds = screen.getDefaultConfiguration (). getBounds (); allScreenBounds.width + = screenBounds.width; allScreenBounds.height = Math.max (allScreenBounds.height, screenBounds.height); } BufferedImage capture = new Robot (). CreateScreenCapture (allScreenBounds); Datoteka imageFile = nova datoteka ("all-screens.bmp"); ImageIO.write (snimanje, "bmp", imageFile); assertTrue (imageFile.exists ()); }

Tijekom iteriranja preko zaslona, ​​uvijek zbrojimo širine i odaberemo samo jednu maksimalnu visinu jer će se zasloni spajati vodoravno.

Ako idemo dalje, moramo spremiti sliku zaslona. Kao i u prethodnom primjeru, možemo koristiti ImageIO.write () metoda.

4. Snimanje zaslona dane komponente GUI-ja

Također možemo napraviti snimku zaslona dane komponente korisničkog sučelja.

Dimenzijama se lako može pristupiti putem getBounds () metoda jer je svaka komponenta svjesna svoje veličine i mjesta.

U ovom slučaju nećemo koristiti Robot API. Umjesto toga, koristit ćemo boja() metoda iz Komponenta klase koja će sadržaj izvući izravno u Slika u baferu:

@Test javna praznina givenComponent_whenTakeScreenshot_thenSaveToFile (komponentna komponenta) baca izuzetak {Pravokutnik componentRect = komponenta.getBounds (); BufferedImage bufferedImage = nova BufferedImage (componentRect.width, componentRect.height, BufferedImage.TYPE_INT_ARGB); component.paint (puferiranaImage.getGraphics ()); Datoteka imageFile = nova datoteka ("komponenta-screenshot.bmp"); ImageIO.write (puferiranaImage, "bmp", imageFile); assertTrue (imageFile.exists ()); }

Nakon dobivanja veze komponente moramo stvoriti Slika u baferu. Za to nam trebaju širina, visina i vrsta slike. U ovom slučaju koristimo BufferedImage.TYPE_INT_ARGB koji se odnosi na 8-bitnu sliku u boji.

Zatim se pomičemo prema naprijed i pozivamo se na boja() metoda za popunjavanje Slika u baferu i isto kao u prethodnim primjerima spremamo je u datoteku s ImageIO.write () metoda.

5. Zaključak

U ovom uputstvu naučili smo nekoliko načina snimanja zaslona pomoću Jave.

Kao i uvijek, izvorni kod sa svim primjerima u ovom vodiču dostupan je na GitHub-u.


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