截图和图片查看工具

  • 仔细想想,要一口气做点有价值的东西,难度还是挺大的,倒不如模仿别人做些简单的东西看看。
    只是为了练练手,所以设计上不是很美观,不过实用性还是有点的。
  • 这个工具的代码我总共用了四个类来实现:
    1. 首先是Screenshot.java文件,主要显示操作界面,有一个菜单栏和4个菜单选项;
    2. 然后是ScreenFrame.java文件,功能是进行截图操作;
    3. 接着是ScreenAll.java文件,功能是直接截取全屏操作;
    4. 最后是ImageViewer.java文件,功能是查看图片操作。
  • 废话少说,直接上代码,你们自己跑去吧。

  • Screenshot.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Screenshot extends JFrame
{
 JMenuBar menuBar ;//初始化菜单栏
JMenu menu;
JMenuItem item1,item2,item3,item4;

public Screenshot(){

 Container con = getContentPane();
 menuBar = new JMenuBar();
 menu = new JMenu("菜单");
 item1 = new JMenuItem("截图");
 item2 = new JMenuItem("查看图片");
 item3 = new JMenuItem("截取全屏");
 item4 = new JMenuItem("退出");
 setName("图片截取和查看软件");
 setBounds(200,199,300,250);
 JButton button = new JButton("开始截图");
 menu.add(item1);
 menu.add(item2);
 menu.add(item3);
 menu.add(item4);
      menuBar.add(menu);
 setJMenuBar(menuBar);
 add(button);
 setVisible(true);
 setResizable(false);
 button.addActionListener(new ActionListener(){//按钮事件,采取匿名内部类方法,调用ScreenFrame()操作
    public void actionPerformed(ActionEvent e){
      //repaint(1000, 300, 400, 300, 400) ;
  setVisible(false);
 // try{
  //Thread.sleep(100);
 // }catch(Exception ee){}
  new ScreenFrame();
  }  
 });

 item1.addActionListener(new ActionListener(){//第一个菜单选项截图的事件监听
   public void actionPerformed(ActionEvent e){
 setVisible(false);//隐藏主界面
 new ScreenFrame();
}
 });
 item2.addActionListener(new ActionListener(){第二个菜单选项查看图片的事件监听
   public void actionPerformed(ActionEvent e){
String []s ={""};
           new ImageViewer().main(s);
}
 });
 item3.addActionListener(new ActionListener(){//第三个菜单选项截取全屏的事件监听
    public void actionPerformed(ActionEvent e){
  setVisible(false);
  new ScreenAll();
}
 });
 item4.addActionListener(new ActionListener(){//第四个菜单选项退出的事件监听
    public void actionPerformed(ActionEvent e){
 System.exit(0);
}
 });

 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String [] args){//程序运行入口
 new Screenshot();
 //System.exit(0);
}
}
  • ScreenFrame.java
 import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.awt.event.MouseEvent;
import java.awt.image.*;
import javax.imageio.ImageIO;

public class ScreenFrame extends JFrame implements java.awt.event.MouseListener   //直接实现MouseListener接口
{
public ScreenFrame(){
 //setSize(300,300);
 try{//Robot会产生AWTException,需要进行捕获
 //setName("开始截图");

 Toolkit t = Toolkit.getDefaultToolkit();     //获取屏幕分辨率
 int ww = t.getScreenSize().width;
 int hh = t.getScreenSize().height;

 Robot r = new Robot();
 BufferedImage image = r.createScreenCapture(new Rectangle(0,0,ww,hh));   //获取屏幕图片
 JLabel label = new JLabel(new ImageIcon(image));
 add(label);
 addMouseListener(this);
 setBounds(0,0,ww,hh);
 //setResizable(false);
 setAlwaysOnTop(true);       //使得窗口一直浮在最上层
 setUndecorated(true) ;       //去掉边框
 setVisible(true);
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }catch(AWTException e){
 }
}

     int x,y,w,h;
boolean b = true;  //标记截取操作的次数,目的是为了是后面画的长方形唯一

public void mouseClicked(MouseEvent e) {
 //鼠标按键在组件上单击(按下并释放)时调用。
if(e.getClickCount() == 2){  //当鼠标双击时候,响应此事件,作用是截取图片并保存

try{
Robot robot = new Robot();
BufferedImage image= robot.createScreenCapture(new Rectangle(x+1,y+1,w-1,h-1));
//JLabel lab = new JLabel(new ImageIcon(image));
ImageIO.write(image,"jpeg",new File("d:\\myimage.jpg"));
setVisible(false); 
Runtime.getRuntime()
.exec("c:\\windows\\System32\\rundll32.exe \"C:\\Program Files\\Windows Photo Viewer\\PhotoViewer.dll\", ImageView_Fullscreen c:\\a.jpg");               //这句代码貌似没起啥作用,暂时不清楚原因
JOptionPane.showMessageDialog(null,"图片存放路径为:d:\\myimage.jpg","图片路径",1);
System.exit(0);

}catch(AWTException e1){
}catch(IOException e2){
}catch(Exception e3){
}
   }

}
public void mouseEntered(MouseEvent e) {
 //鼠标进入到组件上时调用。 
}
public void mouseExited(MouseEvent e) {
 //鼠标离开组件时调用。 

   }
public void mousePressed(MouseEvent e) {
// 鼠标按键在组件上按下时调用。 
if(b){           //获取鼠标按下是的坐标
x=e.getX();
y=e.getY();

//Graphics g = this.getGraphics();
//g.drawRect(x, y, -100, -100);
}
   }
public void mouseReleased(MouseEvent e) {
 //鼠标按钮在组件上释放时调用。
 //e.getSource();
if(b){

Graphics g = getGraphics();   //获取图形上下文
g.setColor(Color.green);      //切线颜色设置为绿色
g.drawRect(x,y,e.getX()-x,e.getY()-y);
//g.drawRect(x,y,e.getX()-x,e.getY()-y);
 w=e.getX()-x;    //获取鼠标释放时的坐标
h=e.getY()-y;
b=false;
}
} 

public static void main(String []args){
 new ScreenFrame();
}

}
  • ScreenAll.java
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import javax.swing.JOptionPane;
import javax.imageio.ImageIO;
import java.io.File;

public class ScreenAll
{
private int x,y;
public ScreenAll(){
 try{
   Toolkit tool = Toolkit.getDefaultToolkit();
x = tool.getScreenSize().width;
y = tool.getScreenSize().height;

Robot r = new Robot();
BufferedImage image = r.createScreenCapture(new Rectangle(0,0,x,y));
ImageIO.write(image,"jpeg",new File("d:\\SreenshotAll.jpg"));
Runtime.getRuntime()
.exec("c:\\windows\\System32\\rundll32.exe \"C:\\Program Files\\Windows Photo Viewer\\PhotoViewer.dll\", ImageView_Fullscreen c:\\a.jpg");
        JOptionPane.showMessageDialog(null,"图片存放路径为:d:\\SreenshotAll.jpg","图片路径",1);
System.exit(0);
 }catch(Exception e){
 }
}
}
  • ImageViewer.java
import java.awt.EventQueue;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class ImageViewer
{
public static void main(String [] args){
 EventQueue.invokeLater(new Runnable(){
   public void run(){
 JFrame frame = new ImageViewerFrame();
 frame.setTitle("ImageViewer");
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.setVisible(true);
}
 });
}
}

class ImageViewerFrame extends JFrame
{
private JLabel label;
 private JFileChooser chooser;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT= 400;

public ImageViewerFrame(){
 setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);//设置窗口大小
 label = new JLabel();
 add(label);
 chooser = new JFileChooser();
 chooser.setCurrentDirectory(new File("."));//设置文件路径
//初始化菜单
 JMenuBar menuBar = new JMenuBar();
 setJMenuBar(menuBar);
 JMenu menu = new JMenu("File");
 menuBar.add(menu);

 JMenuItem openItem = new JMenuItem("Open");
 menu.add(openItem);

 openItem.addActionListener(new ActionListener(){     
   public void actionPerformed(ActionEvent event){
 int result = chooser.showOpenDialog(null);    
 if(result == JFileChooser.APPROVE_OPTION){
   String name = chooser.getSelectedFile().getPath();    //获取存储路径
label.setIcon(new ImageIcon(name));
 }
}
 });

 JMenuItem exitItem = new JMenuItem("Exit");
 menu.add(exitItem);
 exitItem.addActionListener(new ActionListener(){    //退出事件
    public void actionPerformed(ActionEvent event){
      System.exit(0);
 }   
 });

}
}
  • 以下是运行效果,用的是java的swing包做的,虽然有点简陋,但功能没差:
    这里写图片描述
    这里写图片描述
    这里写图片描述
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值