Aprenderemos através das seguintes etapas:
Imagem de entrada, especifique o caminho da imagem a ser processada
Permitir que o usuário arraste e solte a parte a ser cortada
Após a seleção, use a classe Robot para determinar as coordenadas da peça cortada.
Corte a imagem selecionada e mantenha
Em seguida, iniciamos a parte de codificação.
Listagem1: classes introduzidas
Copie o código do código da seguinte forma:
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:
A classe Graphics contém métodos para desenhar retângulos
Usamos a classe Rectangle como a área retangular arrastada para recorte
A classe Robot é usada para capturar capturas de tela
Use o ouvinte do mouse para obter o tempo de arrastar do mouse
A classe Robot usa BufferedImage para processamento de imagem
A classe de arquivo é usada para abrir arquivos de imagem
A classe ImageIO é usada para gravar imagens em arquivos de imagem png ou jpg
JFrame é usado para exibir a interface
Agora escrevemos a classe de entrada contendo o método principal
Listagem2: Classe de entrada
Copie o código do código da seguinte forma:
classe pública CropImage estende JFrame implementa MouseListener, MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
público estático void principal(String args[])
{
novo CropImage().start();
}
ilustrar:
Escreveu uma classe chamada CropImage
Esta classe estende JFrame para implementar todas as funções do frame
Implementados diferentes ouvintes de eventos de mouse para saber quando o usuário começa a arrastar o ponteiro do mouse
A variável drag_status é usada para salvar as coordenadas do mouse quando ele começa a arrastar
Definimos o método principal para chamar um método inicial, que será definido a seguir
O próximo é o método inicial
Listagem 2
Copie o código do código da seguinte forma:
início vazio público()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
adicione(eu);
setSize(400.400);
setVisible(verdadeiro);
addMouseListener(este);
addMouseMotionListener(isto);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
ilustrar:
Definimos uma classe chamada ImagePanel, usando como parâmetro a imagem a ser processada
Coloque o ImagePanel para exibir a imagem no JFrame e comece a escutar os eventos do mouse
A seguir definimos métodos para lidar com eventos de mouse
Listagem 3: manipulador de eventos de mouse
Copie o código do código da seguinte forma:
@Substituir
public void mouseClicked(MouseEvent arg0) {
}
@Substituir
public void mouseEntered(MouseEvent arg0) {
}
@Substituir
public void mouseExited(MouseEvent arg0) {
}
@Substituir
public void mousePressed(MouseEvent arg0) {
repintar();
c1=arg0.getX();
c2=arg0.getY();
}
@Substituir
public void mouseReleased(MouseEvent arg0) {
repintar();
if(arrastar_status==1)
{
c3=arg0.getX();
c4=arg0.getY();
tentar
{
arrastadaTela();
}
pegar(Exceção e)
{
e.printStackTrace();
}
}
}
@Substituir
public void mouseDragged(MouseEvent arg0) {
repintar();
arrastar_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@Substituir
public void mouseMoved(MouseEvent arg0) {
}
pintura vazia pública (gráficos g)
{
super.paint(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h=h*-1;
se(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
ilustrar:
Armazene as coordenadas atuais em c1 e c2 quando o mouse for pressionado
Defina a variável de status de arrasto drag_status como verdadeira quando o mouse é pressionado e o arrasto começa.
Quando o botão do mouse é liberado, significa que a área de corte da imagem foi selecionada e o método dragscreen foi chamado.
O método paint é usado para exibir o retângulo ao arrastar e desenha o retângulo através das coordenadas atuais e das coordenadas inicialmente registradas.
Abaixo está o código para o método dragscreen
Copie o código do código da seguinte forma:
Listagem 4: método dragScreen
public void dragScreen() lança exceção
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h=h*-1;
Robô robô = new Robô();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
Arquivo save_path=new Arquivo("tela1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Imagem recortada salva com sucesso.");
}}
ilustrar:
Primeiro calcule a altura e largura da imagem
Use a classe Robot para fazer uma captura de tela da área cortada e salvá-la em outro arquivo screen1.jpg
código completo
Copie o código do código da seguinte forma:
Listagem 5: ImagePanel.java
importar java.awt.Dimension;
importar java.awt.Graphics;
importar java.awt.Image;
importar javax.swing.ImageIcon;
importar javax.swing.JPanel;
classe ImagePanel estende JPanel {
imagem privada;
public ImagePanel(String imagem) {
this(new ImageIcon(img).getImage());
}
public ImagePanel(Imagem imagem) {
isto.img = img;
Tamanho da dimensão = new Dimension(img.getWidth(null), img.getHeight(null));
// Tamanho da dimensão = new Dimension(10,10);
setPreferredSize(tamanho);
setMinimumSize(tamanho);
setMaximumSize(tamanho);
setTamanho(tamanho);
setLayout(nulo);
}
public void paintComponent(Gráficos g) {
g.drawImage(img, 0, 0, nulo);
}
}
Listagem 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;
classe pública CropImage estende JFrame implementa MouseListener, MouseMotionListener
{
int drag_status=0,c1,c2,c3,c4;
público estático void principal(String args[])
{
novo CropImage().start();
}
início vazio público()
{
ImagePanel im=new ImagePanel("F://Wallpaper//wallpapers//1.jpg");
adicione(eu);
setSize(400.400);
setVisible(verdadeiro);
addMouseListener(este);
addMouseMotionListener(isto);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void dragScreen() lança exceção
{
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h=h*-1;
Robô robô = new Robô();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
Arquivo save_path=new Arquivo("tela1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Imagem recortada salva com sucesso.");
}
@Substituir
public void mouseClicked(MouseEvent arg0) {
}
@Substituir
public void mouseEntered(MouseEvent arg0) {
}
@Substituir
public void mouseExited(MouseEvent arg0) {
}
@Substituir
public void mousePressed(MouseEvent arg0) {
repintar();
c1=arg0.getX();
c2=arg0.getY();
}
@Substituir
public void mouseReleased(MouseEvent arg0) {
repintar();
if(arrastar_status==1)
{
c3=arg0.getX();
c4=arg0.getY();
tentar
{
arrastadaTela();
}
pegar(Exceção e)
{
e.printStackTrace();
}
}
}
@Substituir
public void mouseDragged(MouseEvent arg0) {
repintar();
arrastar_status=1;
c3=arg0.getX();
c4=arg0.getY();
}
@Substituir
public void mouseMoved(MouseEvent arg0) {
}
pintura vazia pública (gráficos g)
{
super.paint(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h=h*-1;
se(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
}