我们将通过以下步骤来学习:
输入图像,指定要处理的图像路径
允许用户拖放要剪裁的部分
选择后使用 Robot 类来确定剪裁部分的坐标
剪裁所选图像并保持
代码由两个文件组成,一个是ImagePanel.java,另外一个文件是CopyImage.java。下面是代码实现:
ImagePanel.java文件如下
package com.application.sample;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class ImagePanel extends JPanel{
private Image img;
public ImagePanel(String path)
{
this(new ImageIcon(path).getImage());
}
public ImagePanel(Image img)
{
this.img=img;
Dimension size=new Dimension(img.getWidth(null),img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
public void paintComponent(Graphics g)
{
g.drawImage(img, 0, 0, null);
}
}
CopyImage.java文件如下:
package com.application.sample;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.event.*;
import java.io.*;
import javax.swing.JFrame;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.math.*;
public class CopyImage extends JFrame
implements MouseListener,MouseMotionListener{
int drag_status=0,c1,c2,c3,c4;
public static void main(String[] args) {
// TODO Auto-generated method stub
new CopyImage().start("D:\\插入排序.jpg");
}
public void start(String path)
{
ImagePanel image=new ImagePanel(path);
add(image);
setSize(400,400);
setVisible(true);
addMouseListener(this);
addMouseMotionListener(this);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void draggedScreen()throws Exception
{
int w = c1 - c3;
int h = c2 - c4;
w =Math.abs(w);
h =Math.abs(h);
Robot robot = new Robot();
BufferedImage img = robot.createScreenCapture(new Rectangle(c1, c2,w,h));
File save_path=new File("D:\\screen1.jpg");
ImageIO.write(img, "JPG", save_path);
System.out.println("Cropped image saved successfully.");
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
repaint();
c1=e.getX();
c2=e.getY();
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
repaint();
if(drag_status==1)
{
c3=e.getX();
c4=e.getY();
try
{
draggedScreen();
}
catch(Exception error)
{
error.printStackTrace();
}
}
}
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
repaint();
drag_status=1;
c3=e.getX();
c4=e.getY();
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
public void paint(Graphics g)
{
super.paint(g);
int w = c1 - c3;
int h = c2 - c4;
w = w * -1;
h = h * -1;
if(w<0)
w = w * -1;
g.drawRect(c1, c2, w, h);
}
}
运行结果如下所示:
原图片如下:
裁剪所得的图片如下所示: