Java中实现可拖放图片剪裁入门教程
这是一篇入门级文章,高手请略过。
在这篇文章中我们将学习如何用Java对图像进行剪裁并将剪裁出来的部分单独保存到文件中。
我们将通过以下步骤来学习:
1.输入图像,指定要处理的图像路径
2.允许用户拖放要剪裁的部分
3.选择后使用Robot类来确定剪裁部分的坐标
4.剪裁所选图像并保持
接下来我们开始编码部分。
Listing1:引入的类
importjava.awt.Graphics; importjava.awt.Rectangle; importjava.awt.Robot; importjava.awt.event.MouseEvent; importjava.awt.event.MouseListener; importjava.awt.event.MouseMotionListener; importjava.awt.image.BufferedImage; importjava.io.File; importjavax.imageio.ImageIO; importjavax.swing.JFrame;
说明:
1.Graphics类包含绘制矩形的方法
2.我们使用Rectangle类作为拖拉的矩形区域以作剪裁
3.Robot类用于捕获屏幕截图
4.使用鼠标侦听器来获取鼠标的拖拉时间
5.Robot类使用BufferedImage来做图像处理
6.File类用于打开图像文件
7.ImageIO类用于将图像写到png或者jpg图像文件中
8.JFrame用于显示界面
现在我们编写包含main方法的入口类
Listing2:入口类
publicclassCropImageextendsJFrameimplementsMouseListener,MouseMotionListener { intdrag_status=0,c1,c2,c3,c4; publicstaticvoidmain(Stringargs[]) { newCropImage().start(); }
说明:
1.编写了一个名为CropImage的类
2.该类扩展了JFrame以实现frame的所有功能
3.实现了不同的鼠标事件侦听器以便知道用户什么时候开始拖动鼠标指针
4.drag_status变量用于保存鼠标开始拖动时的坐标
5.我们定义了main方法去调用一个start方法,这个方法将在下面定义
接下来是start方法
Listing2
publicvoidstart() { ImagePanelim=newImagePanel("F:\\Wallpaper\\wallpapers\\1.jpg"); add(im); setSize(400,400); setVisible(true); addMouseListener(this); addMouseMotionListener(this); setDefaultCloseOperation(EXIT_ON_CLOSE); }
说明:
1.我们定义一个名为ImagePanel的类,使用要处理的图像作为参数
2.在JFrame中放置这个要显示图片的ImagePanel,并开始侦听鼠标事件
下面我们定义用于处理鼠标事件的方法
Listing3:鼠标事件处理函数
@Override publicvoidmouseClicked(MouseEventarg0){ }
@Override publicvoidmouseEntered(MouseEventarg0){ }
@Override publicvoidmouseExited(MouseEventarg0){ }
@Override publicvoidmousePressed(MouseEventarg0){ repaint(); c1=arg0.getX(); c2=arg0.getY(); }
@Override publicvoidmouseReleased(MouseEventarg0){ repaint(); if(drag_status==1) { c3=arg0.getX(); c4=arg0.getY(); try { draggedScreen(); } catch(Exceptione) { e.printStackTrace(); } } }
@Override publicvoidmouseDragged(MouseEventarg0){ repaint(); drag_status=1; c3=arg0.getX(); c4=arg0.getY(); }
@Override publicvoidmouseMoved(MouseEventarg0){
}
publicvoidpaint(Graphicsg) { super.paint(g); intw=c1-c3; inth=c2-c4; w=w*-1; h=h*-1; if(w<0) w=w*-1; g.drawRect(c1,c2,w,h);
}