技术中心

这里象征着我们的态度和能力

>如何在Java中进行图片剪裁
作者:中国IT实验室    来源:中国IT实验室    发布时间:2012-09-03      浏览次数:7238
分享到:
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
    在这篇文章中我们将学习如何用 Java 对图像进行剪裁并将剪裁出来的部分单独保存到文件中。
   
    我们将通过以下步骤来学习:
   
    输入图像,指定要处理的图像路径
   
    允许用户拖放要剪裁的部分
   
    选择后使用 Robot 类来确定剪裁部分的坐标
   
    剪裁所选图像并保持
   
    接下来我们开始编码部分。
   
    Listing1: 引入的类
   
    import java.awt.Graphics;
   
    import java.awt.Rectangle;
   
    import java.awt.Robot;
   
    import java.awt.event.MouseEvent;
   
    import java.awt.event.MouseListener;
   
    import java.awt.event.MouseMotionListener;
   
    import java.awt.image.BufferedImage;
   
    import java.io.File;
   
    import javax.imageio.ImageIO;
   
    import javax.swing.JFrame;
   
    说明:
   
    Graphics 类包含绘制矩形的方法
   
    我们使用 Rectangle 类作为拖拉的矩形区域以作剪裁
   
    Robot 类用于捕获屏幕截图
   
    使用鼠标侦听器来获取鼠标的拖拉时间
   
    Robot 类使用 BufferedImage 来做图像处理
   
    File 类用于打开图像文件
   
    ImageIO 类用于将图像写到 png 或者 jpg 图像文件中
   
    JFrame 用于显示界面
   
    现在我们编写包含 main 方法的入口类
   
    Listing2: 入口类
   
    public class CropImage extends JFrame implements MouseListener, MouseMotionListener
   
    {
   
    int drag_status=0,c1,c2,c3,c4;
   
    public static void main(String args[])
   
    {
   
    new CropImage()。start();
   
    }
   
    说明:
   
    编写了一个名为 CropImage 的类
   
    该类扩展了 JFrame 以实现 frame 的所有功能
   
    实现了不同的鼠标事件侦听器以便知道用户什么时候开始拖动鼠标指针
   
    drag_status 变量用于保存鼠标开始拖动时的坐标
   
    我们定义了 main 方法去调用一个 start 方法,这个方法将在下面定义
   
    接下来是 start 方法
   
    Listing 2
   
    public void start()
   
    {
   
    ImagePanel im=new ImagePanel(“F:Wallpaperwallpapers1.jpg”);
   
    add(im);
   
    setSize(400,400);
   
    setVisible(true);
   
    addMouseListener(this);
   
    addMouseMotionListener( this );
   
    setDefaultCloseOperation(EXIT_ON_CLOSE);
   
    }
   
    说明:
   
    我们定义一个名为 ImagePanel 的类,使用要处理的图像作为参数
   
    在 JFrame 中放置这个要显示图片的 ImagePanel,并开始侦听鼠标事件
   
    下面我们定义用于处理鼠标事件的方法
   
    Listing 3: 鼠标事件处理函数
   
    @Override public void mouseClicked(MouseEvent arg0)
   
    {  }
   
    @Override public void mouseEntered(MouseEvent arg0)
   
    {  }
   
    @Override public void mouseExited(MouseEvent arg0)
   
    {  }
   
    @Override public void mousePressed(MouseEvent arg0)
   
    {
   
    repaint();
   
    c1=arg0.getX();
   
    c2=arg0.getY();
   
    }
   
    @Override public void mouseReleased(MouseEvent arg0) {
   
    repaint();
   
    if(drag_status==1)
   
    {
   
    c3=arg0.getX();
   
    c4=arg0.getY();
   
    try
   
    {
   
    draggedScreen();
   
    }
   
    catch(Exception e)
   
    {
   
    e.printStackTrace();
   
    }
   
    }
   
    }
   
    @Override public void mouseDragged(MouseEvent arg0)
   
    {
   
    repaint();
   
    drag_status=1;
   
    c3=arg0.getX();
   
    c4=arg0.getY();
   
    }
   
    @Override public void mouseMoved(MouseEvent arg0)
   
    {
   
    }
   
    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);
   
    }
   
    说明:
   
    当鼠标按下时存储当前坐标到 c1 和 c2
   
    当鼠标按下并开始拖动时将拖动状态变量 drag_status 设置为 true
   
    到鼠标按键松开时表示图像剪裁区域已经选择完毕,调用 draggedscreen 方法
   
    paint 方法用于拖动时候的矩形显示,通过当前坐标和初始记录的坐标来绘制矩形

[1] [2] 下一页

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号 增值电信业务经营许可证号:滇B2-20110045
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730