Cet article résume les méthodes de capture d'écran de mise en œuvre de la programmation Java communes. Partagez-le pour votre référence, comme suit:
Méthode 1:
Importer java.awt.desktop; import java.awt.dimension; import java.awt.rectangle; import java.awt.robot; import java.awt.toolkit; import java.aww t.image.buffereddimage; import java.io. Fichier; import javax.imageio.imageio; public class CaptureScreen {public static void captureScreen (String filename, string dosder) exception {dimens ion screenSize = toolkit.getDefaultToolkit (). GetScreenSize; Robot Robot = New Robot (); = nouveau fichier (ScreenFile, dossier); Desktop.getDesktop () .Open (f);} public static void main (String [] args) {try {captureScreen ("e: // bonjour", "11.png"); / TODO Block de capture générée automatiquement E.PrintStackTrace ();Méthode 2:
package com.qiu.util; import java.io. *; import javax.swing. *; import java.awt. *; import java.awt.event. *; import java.awt.image. *; im port javax. ImageOio. *; / ** * Une capture d'écran simple * ** / public class screencapture {// Tester Main public static void main (String [] args) lève l'exception {chaîne userdir = systeme m.getProperty ("user.dir" ); )); Capture. } Private Screencapture () {try {robot = new robot ();} catch (awtexception e) {System.err.println ("Erreur interne:" + e); Dialogue. rech); dialog.setVisible (false);}}); (); int minx = mathématiques (x1, x2); , recy, recw, rech);}} public void MouseMoved (MouseEvent e) {LabfullScreenImage.Drawcross (e.getX (), e.gety ();}}); ; .getMaximumSize (); Nouveau rectangle (Toolkit.getDefaultToolkit () .getScreensize ()); = Robot.CreateSCreencapture (New Rectangle (Toolkit.getDefaultToolkit () .getSreensize); Après capture * / public BufferedImage getPickEdImage () {return pickedImage;} / ** Obtenez l'icône capturée * / public ImageIcon getPickEdiCon () {return new ImageIcon (getPickEDImage ()); Format * * @deprecat ed remplacé par SAVEASPNG (fichier de fichier) ** / @Deprecated public void saveTofile (fichier file) lance ioException {imageo.write (getPickEDImage (), defaultImageFormater, fichier); Au format PNG * / public void SAVEASPNG (fichier de fichier) lance ioException {imageo.write (getPickEDImage (), "png", fichier);} / ** Enregistrer en tant que fichier d'image de format JPEG * / public void sauveasjpeg (fichier de fichier) lance ioe xception {imageo.write (getPickEdImage (), "jPEG", fichier);} / ** écrivez un outputStream * / public void write (outputStream out) lance ioException {imageo.write (getPickEDImage (), defaultima geformater, out out )); Ndimage LabfullScreenImage = New Background (); Robot privé; étend JLabel {public void PaintComponent (graphiques g) {super.paintComponent (g); g.Drawrect (x, y, w, h); ); liney, getWidth (), liney);} public void drawrectangle (int x, int y, int, int hauteur) {this.x = x; ;Méthode 3:
Parce qu'il est minimisé pour la palette système, une icône de palette est toujours nécessaire.
La pièce de code de capture d'écran principale est:
Robot ro = new robot (); toolkit tk = toolkit.getDefaultToolkit (); dimension di = tk.getScreenSing (); rectangle rec = nouveau rectangle (0,0, di.widt h, di.Height); buffreDimage bi = ro .
(Le code source provient de CSDN)
Importer java.awt. *; Importer java.awt.datatransfer.dataflavor; import java.awt.datatransfer.transférable; import java.awt.datatransfer.unsupportedflavore xception; import java.awt.event. *; import javax.swing. * ; Jtabbedpane jtp; // un seul endroit de nombreuses images private int index; // un index qui augmentera toujours, utilisé pour identifier des images Jradiobutton Java privé, l'interface Java, l'interface système / ** crée une nouvelle instance de CaptureScreen * /: ::::::::::::::::::::::::::::::: du:- : :::::::::::::::::::::::::::::::::::- ::::::::::::::::::::::::::::: Public CapturesCreen () {super ("Screen Capture Software (troisième édition)"); setLookAndFeel (uiManager.getSystemLookAndFeelSname ();} Catch (sauf sur exe) {exe.printStackTrace ();} Initwindow (); Top, jtabbedpane.scroll_tab_layout);} private void initwindow () {start = new jbutton ("start intercept"); ceci); JLABEL (Capture d'écran ", JLabel.Center); ); Jpanel (); // le panneau avec deux boutons radio jp.add (java = new Jradiobutton ("interface java")); Ceci); New JPanel (); All.Add (JP); : :::::::::::::::::::::::::::::::::::- : :::::::::::::::::::::::::::::::::::- : :::::::::::::::::::::::::::::::::::- : :::::::::::::::::::::::::::::::::::- ::::::::::::::::::::::::::::::::::::::::::- .South); {public void windowclosing (windowEvent we) {capturesCreen.this.setVisible (false);}});} private void inittrayicon () {try {SystemTray st = SystemTray.getSystemTray (); () .getResource ("bg.gif")); ActionEvent ae) {joptionpane.showMessageDialog (capturescreen.t this, "<html> <font color = red> <enter> <h 2> À propos de </h2> </senter> </font>" + "Il s'agit d'une pure java pure Programme de capture d'écran <br> Ajouter à la base précédente, certaines fonctions couramment utilisées, <br> "+" Par exemple, Enregistrer par lots, plusieurs clips et copier à la carte de pâte système. <br> "+" Si vous avez Toutes les questions pendant l'utilisation, n'hésitez pas à nous contacter. <br> "+" <Font Size = 5 Color = Blue> Auteur: Qianli Bingfeng <br> "+" <i> QQ: 24325142 </i> <br> </font> </html> ");}}); pm.addseparator (); pm.add (new MeniUtem (" Afficher la fenêtre principale "). {CapturesCreen.This.setVisible (true);}}); )); "Java Screen Capture", PM); St.Add (Ti); Exception exe) {exe.printStackTrace ();}} private void mises à jour () {this.setVisible (true); Ajouté, // la chose actuelle doit être effacée et le tabpane est remis si (index == 0) {c.removeall (); Ajoutez simplement un panneau à TabPane directement // et vous n'avez rien à faire} picPanel pic = new picPanel (get); PIC); ro = nouveau robot (); (REC); JFRAME JF = NOUVEAU JFRAME (); (true); jf.setSize (di); jf.setVisible (true); Toutes les images * / public void dosaveAll () {if (jtp.getTaBCount () == 0) {joptionpane.showMessageDialog (this, "l'image ne peut pas être vide !!", "erreur", joptionpane.error_message); } JFileChooser JFC = New JFileChoOser ("."); (nouveau jpgfilter () )); jfc.AddChoosableFilter (new pngFilter (); int i = jfc. ext = file.tostrin g (). TolowerCase (); javax.swing.filechoOser .FileFilter ff = jfc.getFileFilter (); À propos de "png";} else if (f f instanceof bmpFilter) {abouette = "bmp"; ? }} // La classe de threads spécialement utilisée pour enregistrer toutes les images, il doit également l'afficher la classe de progression enregistrée SAVEALLEALLTHREAD étend JDialog implémente Runnable {Nom de chaîne privé j pb; // une barre de progression private jlabel info; // une barre d'affichage d'information privative int alltask, donetask; // toutes les tâches, tâches terminées publiques saveallthread (nom de chaîne, chaîne ext) {super (capturescreen.t this, "sauvegarder" , true); .SetMinimum (0); JPB B.SetValue (0); this.add (info, borderlayout.nor th); . {PicPanel pp = (picPanel) jtp.getcomponentat (i); SetText ("<html> <b> Sauvegarde à: </b> <br>" + f.toString () + "</html>"); setValue (Donetask); this.dispose ();}}} / ** * Processus public et enregistrer la méthode des images * Cette méthode n'est plus privée * / public void DOSAVE (BufferedImage Get) Ceci, l'image ne peut pas être vide !! "," erreur ", jopti onPane. Nouveau BMPFilter ()); jfc.AddChoosableFileFilter (new JPGFilter ()); .getSelectedFile (); Jpg "; if (! Ext.endswith (". Jpg ")) {String ns = ext +". Jpg "; file = new file (ns);}} else if (ff instanceof pngFilter) {about =" png "; if (! ext.endswith (". png")) {String ns = ext + ".png"; file = new File (ns); Ext.endSwith (". BMP")) {String ns = Ext + ". BMP"; (".gif")) {String ns = ext + ". gif"; ! ");} else jOptionPane.showMessageDialog (this," Save a échoué! ");}} catch (exception exe) {exe.printStackTrace ();}} / ** * Le traitement public ajoute l'image actuelle à la méthode de presse-papiers * / public void docopy (Final BufferedImage Image) {try {if (get == null) {joptionpane.showMessageDialog (ceci, "l'image ne peut pas être vide !!", "erreur", joptionpane. Error_Message); Nouveau transférable () {public dataflavor [] getTransferDataflavors () {return dataflavor [] {dataflavor.imageflavor}; saveur) lance un non-souplesse , "Copier à la carte de pâte système !!");} catch (exception exe) {exe.printstackTrace (); Error_Message); getSource (); if (source == start) {dostart (); Uimanager .getCrossPlatForTOrdArt ); et on peut mettre dans le panneau TabPane // Il existe également son propre ensemble de méthodes pour gérer l'enregistrement et la copie de classe privée PicPanel étend JPanel implémente ActionListener {JBUTTON SAVE, COPY, CLOLER; // BufferedImag, qui indique la sauvegarde, la copie, la fermeture, Button BufferedImag E Get; // Get Image de Public PicPanel (BufferedImage Get) {Super (New BorderLayout ()); ) {Save = New Jbutton ("Save (S)"); '); JLAB EL ICONE = NOUVEAU JLABEL (NOUVEAU IMAGE (GET)); (ceci); ) {docopy (get);} else if (source == close) {get = null; doclose (this); () {} public boolean accept (fichier file) {if (file.toString (). TolowerCase (). String getde script () {return "* .bmp (image bmp)";}} // Enregistrer les filtres au format jpg la classe privée jpgfilter étend javax.swing.filechooser.fileFilter {public jpgfilter () {} public boolean accl ept (filef file) {if (file.toString () .tolowercase (). Endswith (". jpg") || file.isDirectory ()) {return true;} else return false;} public string getDescription () {return "*. J PG (Image JPG) ";}} // Enregistrer les filtres au format GIF Classe privée Giffilter étend javax.swing.filechooser.fileFilter {public giffilter () {} public boolean accept (fichier file) {if (fi le.toString ( ) .tolowercase (). // Enregistrer le format PNG Filtre Private Classe PNGFilter étend javax.swing.filechooser.fileFilter {public boolean accepte (fichier file) {if (file.tostring (). TolowerCase (). () » MENTES MOUSELISTERNE, MOUSEMOTIONNEMENTS {Private ButtedImage BI; / Indiquez le curseur privé de zone sélectionnée CS = nouveau curseur (cursor.crosshair_cursor); // indique l'état de la souris dans les états privés généraux Current = States.default; // indique l'état d'édition actuel rectangle privé [] Rec; // indique le zone de huit points d'édition / :::::::::::::::::::::::::::::::::::::- : :::::::::::::::::::::::::::::::::::- :::::::::::::::::::::::::::::::::::::::- Public Static int start_x = 1; public static static int start_y = 2; Seuls ces deux doivent être modifiés privé Point P = new Point (); // l'emplacement actuel de la souris Move Private Boolean showtip = true; // Si vous devez afficher une invite. Si vous appuyez sur le bouton de la souris gauche, l'invite Affichez plus la température publique (JFrame, tampon Bi, Int Width, int hauteur) {this.jf = jf; this.addmousmotionListener (this); )); ; endx; : :::::::::::::::::::::::::::::::::::- : :::::::::::::::::::::::::::::::::::- ::::::::::::::::: int x1 = (startx + endx) / 2; 2,5,5); G.Fillrect (X1-2, Endy- 2,5,5); -2,5,5); G.Fillrect (startx-2, start -2,5,5); Starty-2,5,5); ] = nouveau rectangle (x1-5, y-5,10,10); ] = nouveau rectangle ((startx> endx? startx: endx) -5, y1-5,10,10); ? Starty: Endy) -5,10,10); X-5, (Starty> Endy? Starty: Endy) -5,10, 10); (Color); G.Fillrect (PX, py, 170,20); G.Drawstring ("Veuillez maintenir le bouton gauche de la souris et ne pas placer la zone d'écran", PX, P.Y + 15); , West, etc. VOIDE PRIVÉE INITSELECT (States State) {Switch (état) {case par défaut: Currentx = 0; Currenty = 0; Break; Case West: CurrentX = (ENDX> STARTX? 0; = (starty> endy? end_y: start_y); Start_x); casque; MousMoved (MousEevent ME) {DomousEmoved (ME); La région que vous souhaitez sélectionner à chaque fois privé DomousEmoved (MousEevent ME) {if (select.CONTAINS (me.getPoint ())) {this.setCursor (nouveau curseur (cursor.move_cursor)); else {states [] st = states.values (); [i]; Mousevent me) {} public void Mousedrag Ged (Mousevent me) {int x = me.getx (); Starty + (y-TEMPY); ) {if (currentx == start_x) {startx + = (xTempx); | Current == States.South) {if (currenty == start_y) {Starty + = (y-TEMPY); Current == States.North_East || Current == States.North_East || y; Tempx = x;}} else {startx = tempx; = false; true; Mousevent moi) {if (me.getClickCount () == 2) {// rectangle rec = new rectangle (Star TX, Starty, Math.abs (Endx -Startx), Math.abs (endy-starty)); = me.getpoint (); .getSubImage (select.x, select.y, select.width, select.height); x + select.width> = this.getWidth ()) {wid = this.getWidth () - select.x; ) -Select.y;} get = bi.getSubImage (select.x, select.y, wid, het); []) {SwingUtiability.Invokelater (new Runnable () {public void run () {new CapturesCreen ();}}); // indique l'angle nord-ouest de North (nouveau curseur (cursor.n_resize_cursor)), North_East (nouveau curseur (cursor.ne _resize_cursor)), East (nouveau curseur (curseur .e_resize_cursor)), South_East (New Cursor (Cursor.se_resize_cursor) ), South (nouveau curseur (cursor.s_resize_cursor)), sud_west (nouveau curseur (cursor.sw_ redize_cursor)), West (nouveau curseur (cursor.w_resize_cursor)), Move (new Cursor (cursor.move_cursor)), default (New Cursor (cursor.move_cursor)), default (New Cursor (curseur.default_cursor);J'espère que cet article sera utile à la programmation Java de tous.