Aprenderemos a través de los siguientes pasos:
Imagen de entrada, especifique la ruta de la imagen a procesar
Permitir al usuario arrastrar y soltar la parte que se va a recortar
Después de la selección, use la clase Robot para determinar las coordenadas de la parte recortada.
Recortar la imagen seleccionada y mantener
A continuación comenzamos la parte de codificación.
Listado 1: clases introducidas
Copie el código de código de la siguiente manera:
importar java.awt.Graphics;
importar java.awt.Rectangle;
importar java.awt.Robot;
importar java.awt.event.MouseEvent;
importar java.awt.event.MouseListener;
importar java.awt.event.MouseMotionListener;
importar java.awt.image.BufferedImage;
importar java.io.File;
importar javax.imageio.ImageIO;
importar javax.swing.JFrame;
ilustrar:
La clase Graphics contiene métodos para dibujar rectángulos.
Usamos la clase Rectángulo como área rectangular arrastrada para recortar
La clase de robot se utiliza para capturar capturas de pantalla.
Utilice el detector de mouse para obtener el tiempo de arrastre del mouse
La clase Robot usa BufferedImage para el procesamiento de imágenes.
La clase de archivo se utiliza para abrir archivos de imagen.
La clase ImageIO se utiliza para escribir imágenes en archivos de imagen png o jpg
JFrame se utiliza para mostrar la interfaz.
Ahora escribimos la clase de entrada que contiene el método principal.
Listado 2: Clase de entrada
Copie el código de código de la siguiente manera:
la clase pública CropImage extiende JFrame implementa MouseListener, MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
principal vacío estático público (argumentos de cadena [])
{
nueva CropImage().start();
}
ilustrar:
Escribió una clase llamada CropImage
Esta clase extiende JFrame para implementar todas las funciones de frame.
Se implementaron diferentes detectores de eventos del mouse para saber cuándo el usuario comienza a arrastrar el puntero del mouse.
La variable drag_status se usa para guardar las coordenadas del mouse cuando comienza a arrastrar
Definimos el método principal para llamar a un método de inicio, que se definirá a continuación
El siguiente es el método de inicio.
Listado 2
Copie el código de código de la siguiente manera:
inicio vacío público()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
agregar(yo);
establecerTamaño(400,400);
setVisible(verdadero);
addMouseListener(esto);
addMouseMotionListener( esto );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
ilustrar:
Definimos una clase llamada ImagePanel, usando como parámetro la imagen a procesar
Coloque ImagePanel para mostrar la imagen en el JFrame y comience a escuchar los eventos del mouse
A continuación definimos métodos para manejar eventos del mouse.
Listado 3: Manejador de eventos del mouse
Copie el código de código de la siguiente manera:
@Anular
mouseClicked vacío público (MouseEvent arg0) {
}
@Anular
mouseEntered público vacío (MouseEvent arg0) {
}
@Anular
ratón vacío públicoExited (MouseEvent arg0) {
}
@Anular
mousePressed vacío público (MouseEvent arg0) {
repintar();
c1=arg0.getX();
c2=arg0.getY();
}
@Anular
mouseReleased público vacío (MouseEvent arg0) {
repintar();
si(arrastrar_status==1)
{
c3=arg0.getX();
c4=arg0.getY();
intentar
{
pantalla arrastrada();
}
captura (Excepción e)
{
e.printStackTrace();
}
}
}
@Anular
ratón vacío público arrastrado (MouseEvent arg0) {
repintar();
arrastrar_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@Anular
mouseMoved vacío público (MouseEvent arg0) {
}
pintura de vacío público (Gráficos g)
{
super.pintura(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
si(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
ilustrar:
Almacene las coordenadas actuales en c1 y c2 cuando se presiona el mouse
Establezca la variable de estado de arrastre drag_status en verdadero cuando se presiona el mouse y comienza el arrastre.
Cuando se suelta el botón del mouse, significa que se ha seleccionado el área de recorte de la imagen y se llama al método de pantalla arrastrada.
El método de pintura se utiliza para mostrar el rectángulo al arrastrar y dibujar el rectángulo a través de las coordenadas actuales y las coordenadas registradas inicialmente.
A continuación se muestra el código para el método de pantalla arrastrada.
Copie el código de código de la siguiente manera:
Listado 4: método draggedScreen
public void draggedScreen() lanza una excepción
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
Robot robot = nuevo Robot();
BufferedImage img = robot.createScreenCapture (nuevo rectángulo (c1, c2, w, h));
Archivo save_path=nuevo archivo("pantalla1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Imagen recortada guardada correctamente.");
}}
ilustrar:
Primero calcule el alto y el ancho de la imagen.
Utilice la clase Robot para tomar una captura de pantalla del área recortada y guardarla en otro archivo screen1.jpg
código completo
Copie el código de código de la siguiente manera:
Listado 5: ImagePanel.java
importar java.awt.Dimension;
importar java.awt.Graphics;
importar java.awt.Imagen;
importar javax.swing.ImageIcon;
importar javax.swing.JPanel;
clase ImagePanel extiende JPanel {
Imagen privada img;
Panel de imagen público (img de cadena) {
this(new ImageIcon(img).getImage());
}
Panel de imagen público (imagen img) {
this.img = img;
Tamaño de dimensión = nueva dimensión (img.getWidth(null), img.getHeight(null));
// Tamaño de dimensión = nueva Dimensión(10,10);
setPreferredSize(tamaño);
setMinimumSize(tamaño);
setMaximumSize(tamaño);
setSize(tamaño);
setLayout(nulo);
}
componente de pintura público vacío (Gráficos g) {
g.drawImage(img, 0, 0, nulo);
}
}
Listado 6:CropImage.java
importar java.awt.Graphics;
importar java.awt.Rectangle;
importar java.awt.Robot;
importar java.awt.event.MouseEvent;
importar java.awt.event.MouseListener;
importar java.awt.event.MouseMotionListener;
importar java.awt.image.BufferedImage;
importar java.io.File;
importar javax.imageio.ImageIO;
importar javax.swing.JFrame;
la clase pública CropImage extiende JFrame implementa MouseListener, MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
principal vacío estático público (argumentos de cadena [])
{
nueva CropImage().start();
}
inicio vacío público()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
agregar(yo);
establecerTamaño(400,400);
setVisible(verdadero);
addMouseListener(esto);
addMouseMotionListener( esto );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void draggedScreen() lanza una excepción
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
Robot robot = nuevo Robot();
BufferedImage img = robot.createScreenCapture (nuevo rectángulo (c1, c2, w, h));
Archivo save_path=nuevo archivo("pantalla1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Imagen recortada guardada correctamente.");
}
@Anular
mouseClicked vacío público (MouseEvent arg0) {
}
@Anular
mouseEntered público vacío (MouseEvent arg0) {
}
@Anular
ratón vacío públicoExited (MouseEvent arg0) {
}
@Anular
mousePressed vacío público (MouseEvent arg0) {
repintar();
c1=arg0.getX();
c2=arg0.getY();
}
@Anular
mouseReleased público vacío (MouseEvent arg0) {
repintar();
si(arrastrar_status==1)
{
c3=arg0.getX();
c4=arg0.getY();
intentar
{
pantalla arrastrada();
}
captura (Excepción e)
{
e.printStackTrace();
}
}
}
@Anular
ratón vacío público arrastrado (MouseEvent arg0) {
repintar();
arrastrar_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@Anular
mouseMoved vacío público (MouseEvent arg0) {
}
pintura de vacío público (Gráficos g)
{
super.pintura(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
si(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
}