Robenie snímok obrazovky pomocou Javy

1. Úvod

V tomto výučbe sa pozrieme na niekoľko rôznych spôsobov snímania obrazovky v prostredí Java.

2. Vytvorenie snímky obrazovky pomocou Robot

V našom prvom príklade urobíme snímku obrazovky hlavnej obrazovky.

Na to použijeme createScreenCapture () metóda z Robot trieda. Trvá to a Obdĺžnik ako parameter, ktorý nastavuje hranice snímky obrazovky a vráti a BufferedImage objekt. The BufferedImage možno ďalej použiť na vytvorenie obrazového súboru:

@Test public void givenMainScreen_whenTakeSc Screenshot_thenSaveToFile () vyvolá výnimku {Rectangle screenRect = nový Rectangle (Toolkit.getDefaultToolkit (). GetScreenSize ()); BufferedImage capture = nový Robot (). CreateScreenCapture (screenRect); Súbor imageFile = nový súbor ("single-screen.bmp"); ImageIO.write (snímanie, "bmp", imageFile); assertTrue (imageFile .exists ()); }

Rozmery obrazovky sú prístupné cez Sada nástrojov triedy pomocou jeho getScreenSize () metóda. V systémoch s viacerými obrazovkami sa predvolene používa primárny displej.

Po zachytení obrazovky do Obrázok v medzipamäti, môžeme to zapísať do súboru s ImageIO.write (). Potrebujeme na to dva ďalšie parametre. Formát obrázka a samotný súbor obrázka. V našom príklade používame.bmp formáte, ale ostatným sa páči.png, .jpg alebo .gif sú tiež k dispozícii.

3. Vytvorenie snímky obrazovky z viacerých obrazoviek

Je tiež možné vytvoriť snímku obrazovky viacerých displejov naraz. Rovnako ako v predchádzajúcom príklade môžeme použiť createScreenCapture () metóda z Robot trieda. Tentoraz však hranice snímky obrazovky musia pokrývať všetky požadované obrazovky.

Na získanie všetkých displejov použijeme GraphicsEnvironment trieda a jej getScreenDevices () metóda.

Ďalej ideme načítať väzbu každej jednotlivej obrazovky a vytvoríme a Obdĺžnik ktoré sa zmestia všetkým:

@Test public void givenMultipleScreens_whenTakeSc Screenshot_thenSaveToFile () vyvolá výnimku {GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); GraphicsDevice [] screens = ge.getScreenDevices (); Rectangle allScreenBounds = new Rectangle (); pre (GraphicsDevice screen: screens) {Rectangle screenBounds = screen.getDefaultConfiguration (). getBounds (); allScreenBounds.width + = screenBounds.width; allScreenBounds.height = Math.max (allScreenBounds.height, screenBounds.height); } Zachytenie BufferedImage = nový Robot (). CreateScreenCapture (allScreenBounds); Súbor imageFile = nový súbor ("all-screens.bmp"); ImageIO.write (snímanie, "bmp", imageFile); assertTrue (imageFile.exists ()); }

Pri iterácii nad displejmi vždy zhrnieme šírky a zvolíme iba jednu maximálnu výšku, pretože obrazovky budú vodorovne spojené.

Ďalej ideme, aby sme uložili obrázok obrazovky. Rovnako ako v predchádzajúcom príklade môžeme použiť ImageIO.write () metóda.

4. Vytvorenie snímky obrazovky s daným komponentom GUI

Môžeme tiež urobiť snímku obrazovky daného komponentu používateľského rozhrania.

Rozmery sú ľahko prístupné cez getBounds () metóda, pretože každý komponent si je vedomý svojej veľkosti a umiestnenia.

V tomto prípade nebudeme používať Robot API. Namiesto toho použijeme farba () metóda z Komponent triedy, ktorá vtiahne obsah priamo do BufferedImage:

@Test public void givenComponent_whenTakeSc Screenshot_thenSaveToFile (komponentný komponent) vyvolá výnimku {Rectangle componentRect = component.getBounds (); BufferedImage bufferedImage = nový BufferedImage (componentRect.width, componentRect.height, BufferedImage.TYPE_INT_ARGB); component.paint (bufferedImage.getGraphics ()); Súbor imageFile = nový súbor ("component-screenshot.bmp"); ImageIO.write (bufferedImage, "bmp", imageFile); assertTrue (imageFile.exists ()); }

Po získaní viazania komponentu musíme vytvoriť BufferedImage. Na to potrebujeme šírku, výšku a typ obrázka. V tomto prípade používame BufferedImage.TYPE_INT_ARGB ktorý odkazuje na 8-bitový farebný obrázok.

Potom sa posunieme vpred, aby sme vyvolali farba () metóda na vyplnenie BufferedImage a rovnako ako v predchádzajúcich príkladoch ho ukladáme do súboru s ImageIO.write () metóda.

5. Záver

V tomto tutoriáli sme sa naučili niekoľko spôsobov, ako snímať snímky obrazovky pomocou Javy.

Ako vždy je zdrojový kód so všetkými príkladmi v tomto výučbe k dispozícii na GitHub.


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