Este es un artículo básico, expertos, omítanlo.
En este artículo aprenderemos cómo recortar una imagen en Java y guardar las partes recortadas por separado en un archivo.
Aprenderemos a través de los siguientes pasos:
1. Ingrese la imagen y especifique la ruta de la imagen que se procesará.
2. Permitir a los usuarios arrastrar y soltar la parte que se va a recortar.
3. Después de seleccionar, use la clase Robot para determinar las coordenadas de la parte recortada.
4. Recorta la imagen seleccionada y mantenla
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:
1.La clase Gráficos contiene métodos para dibujar rectángulos.
2. Usamos la clase Rectángulo como área rectangular arrastrada para recortar.
3.La clase de robot se utiliza para realizar capturas de pantalla.
4. Utilice un detector de mouse para obtener el tiempo de arrastre del mouse.
5. La clase Robot usa BufferedImage para el procesamiento de imágenes.
6.La clase de archivo se utiliza para abrir archivos de imagen.
7.La clase ImageIO se utiliza para escribir imágenes en archivos de imagen png o jpg.
8.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:
1.Escribí una clase llamada CropImage
2. Esta clase extiende JFrame para implementar todas las funciones del marco.
3. Se implementaron diferentes detectores de eventos del mouse para saber cuándo el usuario comienza a arrastrar el puntero del mouse.
4.la variable drag_status se usa para guardar las coordenadas cuando el mouse comienza a arrastrar
5. 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:
1. Definimos una clase llamada ImagePanel, usando como parámetro la imagen a procesar
2. 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:
1. Cuando se presiona el mouse, almacene las coordenadas actuales en c1 y c2
2. Establezca la variable de estado de arrastre drag_status en verdadero cuando se presiona el mouse y comienza el arrastre.
3. 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.
4. 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.
Listado 4: método draggedScreen
Copie el código de código de la siguiente manera:
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:
1. Primero calcule el alto y el ancho de la imagen.
2. Utilice la clase Robot para tomar una captura de pantalla del área recortada y guardarla en otro archivo screen1.jpg
código completo
Listado 5: ImagePanel.java
Copie el código de código de la siguiente manera:
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
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;
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);
}
}