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.