Este artículo resume los métodos comunes de captura de pantalla de implementación de programación Java. Compártelo para su referencia, como sigue:
Método 1:
import java.awt.desktop; import java.awt.dimension; import java.awt.rectangle; import java.awt.robot; import java.awt.toolkit; import java.aww t.image.bufferedimage; import java.io. Archivo; import javax.imageio.imageio; public class CapturesCreen {public static void capturescreen (String fileName, String Folder) lanza la excepción {Dimens Ion Screensize = Toolkit.getDefaultToolkit (). GetSCreensize () Robot Robot = nuevo Robot (); = nuevo archivo (Fily, carpeta); Desktop.getDeskTop () .open (f); / TODO Auto Generado Bloque E.PrintStackTrace ();Método 2:
paquete com.qiu.util; import java.io.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*; IM Port Javax. ImageIO.*;/***Una captura de pantalla simple***/public class screencapture {// prueba principal pública public void main (string [] args) lanza excepción {string userDir = systeme m.getProperty ("user.dir" ); ); Captura. } private screencapture () {try {robot = new Robot (); diálogo. RECH); () int minx = Math .Min (x1, x2); , recy, recw, rech); ; .getMaxImumSize ()); nuevo rectangle (Toolkit.getDefaultToolkit () .getScreensize ())); = Robot.CreateScreencapture (nuevo rectángulo (Toolkit.getDefaultToolkit () .getScreensize ())); Después de capturar* / public BufferedImage GetPickedImage () {return PickedImage; formato * * @Deprecat ed reemplazado por saveAspng (archivo de archivo) ** / @Depreced public void Savetofile (archivo de archivo) lanza IOException {imageIO.Write (getPickedImage (), defaultImageFormater, archivo); En formato png*/ public void saveAspng (archivo de archivo) lanza ioexception {imageIO.write (getPickedImage (), "png", archivo); lanza IOE Xception {imageIO.Write (getPickedImage (), "jpeg", archivo); ); NDIMAGE LABLEDSCREENIMAGE = New BackgroundImage (); extiende jlabel {public void PaintComponent (Graphics g) {super.PaintComponent (g); ); liney, getwidth (), liney); ;Método 3:
Debido a que se minimiza a la paleta del sistema, todavía se necesita un icono de paleta.
La parte del código de captura de pantalla principal es:
Robot ro = new Robot (); Toolkit tk = Toolkit.getDefaultToolkit (); dimension di = tk.getScreensize (); rectangle rec = nuevo rectángulo (0,0, di.widt h, di.Height); buffedimage bi = ro .
(El código fuente es de CSDN)
import java.awt.*; import java.awt.datatransfer.dataflavor; import java.awt.datatransfer.transferible; import java.awt.datatransfer.unsupportedflavore xception; import java.awt.event.*; import javax.swing.* ; Jtabbedpane jtp; // un solo lugar muchas imágenes índice intent int; // un índice que siempre aumentará, utilizado para identificar imágenes Jradiobutton java, sistema; // interfaz java, interfaz del sistema/** crea una nueva instancia de capiturescreen* /: :::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::: para::: ::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::lete CaptureScreen () {Super ("Software de captura de pantalla (tercera edición)"); SetlookAndFeel (UIMANAGRA. Superior, jtabbedpane.scroll_tab_layout); esto); JLabel ("Captura de pantalla", jlabel.center); ); Jpanel (); // El panel con dos botones de radio jp.add (java = new JRadioButton ("Java Interface"); esto); nuevo JPanel (); :::::::::::::::::: para::: ::::::::::::::::::::::::::::::: :::::::::::::::::: para::: ::::::::::::::::::::::::::::::: :::::::::::::::::: para::: ::::::::::::::::::::::::::::::: :::::::::::::::::: para::: ::::::::::::::::::::::::::::::: :::::::::::::::::: para::::::: ::::::::::::::::::. South) {Public Void WindowCleSing (WindowsEvent We) {CapturesCreen.THIS.SetVisible (false); () .getResource ("bg.gif")); ActionEvent ae) {joptionPane.ShowMessageDialog (capturescreen.this, "<html> <font color = rojo> <center> <h 2> sobre </h2> </centro> </font>" + "Esta es una java pura Programa de captura de pantalla <br> Agregar a la base anterior, algunas funciones comúnmente utilizadas, <br> " +" Por ejemplo, guardar por lotes, múltiples clips y copiar a la placa de pasta del sistema. Cualquier pregunta durante el uso, no dude en contactarnos. <br> " +" <font size = 5 color = azul> autor: Qianli Bingfeng <br> " +" <i> QQ: 24325142 </i> <br> </font> </html> ");}}); pm.addseparator (); pm.add (nuevo menuitem (" show principal ventana ")). AddactionListener (new ActionListener () {public void ActionPerformed (ActionEvent Ae) {CapturesCreen.THIS.SetVisible (true); ); "Captura de pantalla Java", PM); Excepción exe) {exe.printStackTrace (); agregado,/la cosa actual debe eliminarse y el tabpane se vuelve a colocar si (index == 0) {c.removeall (); Simplemente agregue un panel al Tabpane directamente // no tiene que hacer nada} Picpanel Pic = nuevo Picpanel (get); Pic); RO = Robot (); (rec); (verdadero); Todas las imágenes */ public void dosaveall () {if (jtp.gettabcount () == 0) {joptionPane.ShowMessEdialog (esta, "la imagen no puede estar vacía !!", "Error", joptionPane.error_message); } Jfilechooser jfc = new jfilechooser ("."); Gfilter () )); ext = file.ToStrin g (). TOLETRACE (); Acerca de = "png"; {ext = ext.substring (0, ext.lastindexof (ab out.tolowercase ())); }} // La clase de subprocesos especialmente utilizada para guardar todas las imágenes, también debe mostrarlo la barra de progreso guardada en la clase privada SaveallThread extiende JDialog implementos runnables {Nombre de cadena privada; // encabezado de nombre de archivo Cadena privada Ext; // Formato de archivo Jprogressbar privado j pb; // una barra de progreso private Jlabel Info; // Una barra de visualización de información privada int allTask, Donetask; // Todas las tareas, Tareas completadas public saveallThread (nombre de cadena, cadena ext) {super (capturescreen.this, "guardar" , verdadero); .SetMinimum (0); this.Add (info, borderlaut.nor th); ) .Start (); {Picpanel Pp = (Picpanel) JTP.GetComponentat (i); setText ("<html> <b> Guardar a: </b> <r>" F.ToString ()+"</html>"); setValue (Donetask); this.Dispose (); esto, "la imagen no puede estar vacía!", Jopti Onpane. nuevo BMPFilter ()); .getSelectedFile (); Jpg "; if (! Ext.endswith (". Jpg ")) {string ns = ext+". Jpg "; file = nuevo archivo (ns);}} else if (ff instanceOf pngfilter) {acerca de =" png "; if (! ext.endswith (". png")) {string ns = ext+".png"; ext.endswith (". bmp")) {string ns = ext+". bmp"; (".gif")) {string ns = ext+". gif"; ! ");} más joptionPane.ShowMessEdialog (esto," ¡Guardar fallido! ");}} Catch (Exception exe) {exe.printStackTrace ();}} /** *Procesamiento público agrega la imagen actual al método de portapapeles * / public void Docopy (imagen final de BufferedImage) {try {if (get == NULL) {JOPTIONPANE.SHOWMessEdialog (esto, "La imagen no puede estar vacía !!", "Error", JOptionPane. ERROR_MESSAGE); New Transferable () {public DataFlaus [] getTransferDataFlaVors () {return New DataFloor [] {DataFlake.ImageFlear}; Sabor) lanza sin apoyo a la imagen de retorno; , "Copiar en el tablero de pegar el sistema!"); Error_message); getSource (); UIMANAGRA. ); y uno puede poner en el panel Tabpane // también existe su propio conjunto de métodos para manejar guardar y copiar la clase privada Picpanel extiende JPanel implementa ActionListener {JButton Save, Copy, Close; // Bufferedimag, que indica guardar, copiar, cerrar, cerrar, cerrar, Button BufferImag E Get;/Get Image of Public Picpanel (BufferedImage Get) {súper (nuevo BorderLayout ()); ) {save = new JButton ("Save (S)"); ') JLAB EL ICON = NEW JLABEL (New Imageicon (get)); (this); ) {Docopia (get); () {} public boolean Acept (archivo de archivo) {if (file.ToString (). String getDe script () {return " *.bmp (imagen bmp)"; Archivo) {if (file.ToString () .tolowercase (). Endswith (". Jpg") || J pg (jpg imagen) ";}} // Guardar filtros en formato GIF Clase privada Giffilter extiende javax.swing.filechooser.fileFilter {public giffilter () {} public boolean Acept (archivo de archivo) {if (fi le.ToString ( ) .tolower (). Endswith (".gif") || // Guardar Filtro de formato PNG Clase privada PngFilter extiende javax.swing.filechooser.fileFilter {public boolean Acept (archivo de archivo) {if (file.ToString (). TOlowerCase (). Endswith (". Png") || File.isDirectory ()) {return true; MouseListener, MouseMotionListener {Private BufferedImage Bi; /Indicar el área seleccionada Cursor privado CS = nuevo cursor (cursor.crosshair_cursor); // indica el estado del mouse en estados privados generales actuales = estados.default; // indica el rectángulo privado de edición actual [] rec; // indica el Área de ocho puntos de edición/: :::::::::::::::::::::::::::::::::::::::::: :: :::::::::::::::::: para::: ::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::: no Public Static int inicio_x = 1; Solo estos dos deben cambiarse el punto privado p = nuevo punto (); // La ubicación actual del mouse Move private boolean showtip = true; // Si debe mostrar un mensaje. Si presiona el botón del mouse izquierdo, la solicitud lo hará ya no muestre la temperatura pública (JFrame JF, BufferedImage BI, int alth) {this.jf = jf; this.AddMousEmotionListener (this); ); ; endx; :::::::::::::::::: para::: ::::::::::::::::::::::::::::::: :::::::::::::::::: para::: ::::::::::::::::::::::::::::::: :::::::::::::::::or. 2,5,5); -2,5,5); Starty-2,5,5); ] = nuevo rectángulo (x1-5, y-5,10,10); ] = nuevo rectángulo ((startx> endx? startx: endx) -5, y1-5,10,10); ? Starty: Endy) -5,10,10); X-5, (Starty> Endy? Starty: Endy) -5,10, 10); (Color.cyan); G.DrawString ("Mantenga presionado el botón del mouse izquierdo y no coloque el área de captura de pantalla", PX, P.Y+15); , West, etc. Break; 0; = (Starty> Endy? End_y: start_y); Start_x); MouseMoved (MouseEvent ME) {Domousemoved (me); La región que desea seleccionar cada vez que el vacío Private DomouseMed (mouseEvent me) {if (select.contains (me.getpoint ()) {this.setCursor (nuevo cursor (cursor.move_cursor)); else {States [] st = States.Values (); [i]; Mousevent me) {} public void Mousedrag Ged (MouseEvent Me) {int x = me.getx (); Starty+= (Y-Tempy); ) {if (currentx == start_x) {startx+= (x-tempx); | Current == estados. actual == estados.north_east || actual == estados.north_East || y; tempx = x = falso; verdadero; MouseEvent ME) {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; []) {SwingUtility.invokelater (new runnable () {public void run () {new CapturesCreen ();}}); // Indica la esquina noroeste de North (nueva cursor (cursor.n_resize_cursor)), North_East (nuevo cursor (cursor.ne _resize_cursor)), este (nuevo cursor (cursor .e_resize_cursor)), sur (new Cursor (cursor.se_ese_cursor) ), South (nuevo cursor (cursor.s_resize_cursor)), South_west (nuevo cursor (cursor.sw_ resize_cursor)), oeste (nuevo cursor (cursor.w_resize_cursor)), movimiento (nuevo cursor (cursor.move_cursor), predeterminado (new New Cursor (cursor.default_cursor);Espero que este artículo sea útil para la programación Java de todos.