zoukankan      html  css  js  c++  java
  • Java实例开发0101 屏幕捕获工具

    知识点:

    1.Swing (使用eclipse插件Jigloo开发)

    2.JPEG编码器

    源码:

    package chapter01.sample01;
    
    import java.awt.Dimension;
    import java.awt.Image;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    
    import javax.swing.ImageIcon;
    import javax.swing.JFileChooser;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JScrollPane;
    import javax.swing.KeyStroke;
    import javax.swing.SwingUtilities;
    import javax.swing.WindowConstants;
    
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
    
    @SuppressWarnings("restriction")
    public class CaptureScreen extends javax.swing.JFrame {
        private static final long serialVersionUID = -2726631763599696338L;
        private JMenuBar jMenuBar1;
        private JMenuItem jMenuItemClear;
        private JScrollPane jScrollPaneGloba;
        private JLabel jLabelShow;
        private JMenuItem jMenuItemExit;
        private JMenuItem jMenuItemSaveAs;
        private JMenuItem jMenuItemCapture;
        private JMenu jMenu1;
    
        private JFileChooser fileChooser = new JFileChooser();// 文件选择器
        private JPEGImageEncoder encoder = null;// JPEG编码器
        private Image tempImage = null;
    
        /**
         * Auto-generated main method to display this JFrame
         */
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    CaptureScreen inst = new CaptureScreen();
                    inst.setLocationRelativeTo(null);
                    inst.setVisible(true);
                }
            });
        }
    
        public CaptureScreen() {
            super();
            initGUI();
        }
    
        private void initGUI() {
            try {
                setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
                this.setTitle("CaptrueScreenTool");
                getContentPane().setLayout(null);
                {
                    jScrollPaneGloba = new JScrollPane();
                    getContentPane().add(jScrollPaneGloba);
                    // jScrollPaneGloba.setBounds(0, 0, 384, 234);//不能这样子,否则还是窗体扩大了就会显示不全
                    jScrollPaneGloba.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
                    {
                        jLabelShow = new JLabel();
                        jScrollPaneGloba.setViewportView(jLabelShow);// 面板的Viewport属性
                    }
                }
                {
                    jMenuBar1 = new JMenuBar();
                    setJMenuBar(jMenuBar1);
                    jMenuBar1.setSize(384, 30);
                    jMenuBar1.setPreferredSize(new java.awt.Dimension(384, 30));
                    {
                        jMenu1 = new JMenu();
                        jMenuBar1.add(jMenu1);
                        jMenu1.setText("\u64cd\u4f5c");
                        {
                            jMenuItemCapture = new JMenuItem();
                            jMenu1.add(jMenuItemCapture);
                            jMenuItemCapture.setText("\u622a\u5c4f");
                            jMenuItemCapture.setAccelerator(KeyStroke.getKeyStroke("shift ctrl pressed P"));
                            jMenuItemCapture.addActionListener(new ActionListener() {
                                public void actionPerformed(ActionEvent evt) {
                                    jMenuItemCaptureActionPerformed(evt);
                                }
                            });
                        }
                        {
                            jMenuItemSaveAs = new JMenuItem();
                            jMenu1.add(jMenuItemSaveAs);
                            jMenuItemSaveAs.setText("\u4fdd\u5b58");
                            jMenuItemSaveAs.setAccelerator(KeyStroke.getKeyStroke("shift pressed S"));
                            jMenuItemSaveAs.setEnabled(false);
                            jMenuItemSaveAs.addActionListener(new ActionListener() {
                                public void actionPerformed(ActionEvent evt) {
                                    saveImage();
                                }
                            });
                        }
                        {
                            jMenuItemClear = new JMenuItem();
                            jMenu1.add(jMenuItemClear);
                            jMenuItemClear.setText("\u6e05\u7a7a");
                            jMenuItemClear.setAccelerator(KeyStroke.getKeyStroke("shift ctrl pressed C"));
                            jMenuItemClear.setEnabled(false);
                            jMenuItemClear.addActionListener(new ActionListener() {
                                public void actionPerformed(ActionEvent evt) {
                                    jMenuItemClearActionPerformed(evt);
                                }
                            });
                        }
                        {
                            jMenuItemExit = new JMenuItem();
                            jMenu1.add(jMenuItemExit);
                            jMenuItemExit.setText("\u9000\u51fa");
                            jMenuItemExit.setAccelerator(KeyStroke.getKeyStroke("shift ctrl pressed X"));
                            jMenuItemExit.addActionListener(new ActionListener() {
                                public void actionPerformed(ActionEvent evt) {
                                    jMenuItemExitActionPerformed(evt);
                                }
                            });
                        }
                    }
                }
                pack();
                setSize(400, 300);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private void jMenuItemCaptureActionPerformed(ActionEvent evt) {
            tempImage = this.createImage();
            jLabelShow.setIcon(new ImageIcon(tempImage));
            jMenuItemCapture.setEnabled(false);
            jMenuItemSaveAs.setEnabled(true);
            jMenuItemClear.setEnabled(true);
        }
    
        // 截屏 :这里是重点,保存图片
        private Image createImage() {
            try {
                Image tempLocalImage = null;
                Robot robot = new Robot();
                Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
                Rectangle scrRectangle = new Rectangle(0, 0, dimension.width, dimension.height);
                tempLocalImage = robot.createScreenCapture(scrRectangle);
                return tempLocalImage;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        // 保存 :这里是保存图片的代码
        private void saveImage() {
            try {
                int save = fileChooser.showSaveDialog(this);// Pops up a "Save File" file chooser dialog.
                if (save == JFileChooser.APPROVE_OPTION) {// 点击了OK(或者Yes)
                    // 获取要设置的文件名(包括路径)
                    File saveFileName = fileChooser.getSelectedFile();
                    // 获取要保存文件的名字
                    String fileName = new String(saveFileName.getPath() + ".jpg");// abstract pathname
                    // 1.首先创建一个输出流
                    FileOutputStream fileOutputStream = new FileOutputStream(fileName);
                    // 2.然后把输出流用JPEG编码器进行包裹,其实就是把输出流连接到编码器
                    encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);
                    // 把BufferedImage对象进行编码
                    encoder.encode((BufferedImage) tempImage);
                    fileOutputStream.flush();// 清空缓存
                    fileOutputStream.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
        // 清空
        private void jMenuItemClearActionPerformed(ActionEvent evt) {
            jLabelShow.setIcon(null);
            jMenuItemCapture.setEnabled(true);
            jMenuItemClear.setEnabled(false);
            jMenuItemSaveAs.setEnabled(false);
        }
    
        // 退出
        private void jMenuItemExitActionPerformed(ActionEvent evt) {
            System.exit(0);
        }
    
    }

    显示效果:

    6

    截出来的图片:当时的整个屏幕的图片

    test

  • 相关阅读:
    请问,如何在windows系统下面同时使用中文和英文的cmd?_百度知道
    boost计算随机数和计算crc32简单示例
    使用 boost 进行 CRC32 校验
    常见的Hash算法
    省了一笔钱,关点被爱国者无线硬盘打动入手了
    夏新大V二代,外型不错,屏幕偏小,电池偏小,质感上还可以提升两个level,把整个品味提一提,再把价格降到999,内置软件上再下点功夫就不错了
    藏红花
    我来自台湾:普力600 消毒锭_普力-600 消毒片PL-600 SH-XT-K礼盒小套组_易迅发现_易迅网
    我来自台湾:普力600 消毒锭_普力-600 消毒片PL-600 SH-XT-K礼盒小套组_易迅发现_易迅网
    中继联通chinaunicom热点。求路由推荐。-无线路由器-中国无线论坛
  • 原文地址:https://www.cnblogs.com/yinger/p/2165883.html
Copyright © 2011-2022 走看看