JAVA實現螢幕抓圖 遠端桌面控制

來源:互聯網
上載者:User
主要使用的是java.util.Robot類來捕獲螢幕,可以實現對螢幕一個矩形地區的捕獲,通過這個類,我們也可以實現一個遠端桌面控制的程式。package com.qiu.util; </p><p>import java.io.*; </p><p>import java.net.*; </p><p>import javax.swing.*; </p><p>import java.awt.*; </p><p>import java.awt.event.*; </p><p>import java.awt.image.*; </p><p>import javax.imageio.*; </p><p>import java.io.*; </p><p>/**@Author Qiu_BaiChao </p><p>*一個簡單的螢幕抓圖 </p><p>* </p><p>**/ </p><p>public class ScreenCapture { </p><p>//test main </p><p>public static void main(String[] args) throws Exception{ </p><p>String userdir = System.getProperty("user.dir"); </p><p>File tempFile = new File("d:","temp.png"); </p><p>ScreenCapture capture = ScreenCapture.getInstance(); </p><p>capture.captureImage(); </p><p>JFrame frame = new JFrame(); </p><p>JPanel panel = new JPanel(); </p><p>panel.setLayout(new BorderLayout()); </p><p>JLabel imagebox = new JLabel(); </p><p>panel.add(BorderLayout.CENTER,imagebox); </p><p>imagebox.setIcon(capture.getPickedIcon()); </p><p>capture.saveToFile(tempFile); </p><p>capture.captureImage(); </p><p>imagebox.setIcon(capture.getPickedIcon()); </p><p>frame.setContentPane(panel); </p><p>frame.setSize(400,300); </p><p>frame.show(); </p><p>System.out.println("Over"); </p><p>} </p><p>private ScreenCapture() { </p><p>try{ </p><p>robot = new Robot(); </p><p>} </p><p>catch(AWTException e) { </p><p>System.err.println("Internal Error: " + e); </p><p>e.printStackTrace(); </p><p>} </p><p>JPanel cp = (JPanel)dialog.getContentPane(); </p><p>cp.setLayout(new BorderLayout()); </p><p>labFullScreenImage.addMouseListener(new MouseAdapter() { </p><p>public void mouseReleased(MouseEvent evn) { </p><p>isFirstPoint = true; </p><p>pickedImage = fullScreenImage.getSubimage(recX,recY,recW,recH); </p><p>dialog.setVisible(false); </p><p>} </p><p>}); </p><p>labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter() { </p><p>public void mouseDragged(MouseEvent evn) { </p><p>if(isFirstPoint) { </p><p>x1 = evn.getX(); </p><p>y1 = evn.getY(); </p><p>isFirstPoint = false; </p><p>} </p><p>else { </p><p>x2 = evn.getX(); </p><p>y2 = evn.getY(); </p><p>int maxX = Math.max(x1,x2); </p><p>int maxY = Math.max(y1,y2); </p><p>int minX = Math.min(x1,x2); </p><p>int minY = Math.min(y1,y2); </p><p>recX = minX; </p><p>recY = minY; </p><p>recW = maxX-minX; </p><p>recH = maxY-minY; </p><p>labFullScreenImage.drawRectangle(recX,recY,recW,recH); </p><p>} </p><p>} </p><p>public void mouseMoved(MouseEvent e) { </p><p>labFullScreenImage.drawCross(e.getX(),e.getY()); </p><p>} </p><p>});<br />  <br />   </p><p>cp.add(BorderLayout.CENTER,labFullScreenImage); </p><p>dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); </p><p>dialog.setAlwaysOnTop(true); </p><p>dialog.setMaximumSize( </p><p>Toolkit.getDefaultToolkit().getScreenSize()); </p><p>dialog.setUndecorated(true); </p><p>dialog.setSize(dialog.getMaximumSize()); </p><p>dialog.setModal(true); </p><p>} </p><p>//Singleton Pattern </p><p>public static ScreenCapture getInstance() { </p><p>return defaultCapturer; </p><p>} </p><p>/**捕捉全屏慕*/ </p><p>public Icon captureFullScreen() { </p><p>fullScreenImage = robot.createScreenCapture(new Rectangle( </p><p>Toolkit.getDefaultToolkit().getScreenSize())); </p><p>ImageIcon icon = new ImageIcon(fullScreenImage); </p><p>return icon; </p><p>} </p><p>/**捕捉螢幕的一個矯形地區 </p><p>*/ </p><p>public void captureImage() { </p><p>fullScreenImage = robot.createScreenCapture(new Rectangle( </p><p>Toolkit.getDefaultToolkit().getScreenSize())); </p><p>ImageIcon icon = new ImageIcon(fullScreenImage); </p><p>labFullScreenImage.setIcon(icon); </p><p>dialog.setVisible(true); </p><p>} </p><p>/**得到捕捉後的BufferedImage*/ </p><p>public BufferedImage getPickedImage() { </p><p>return pickedImage; </p><p>} </p><p>/**得到捕捉後的Icon*/ </p><p>public ImageIcon getPickedIcon() { </p><p>return new ImageIcon(getPickedImage()); </p><p>} </p><p>/**儲存為一個檔案,為PNG格式 </p><p>*@deprecated </p><p>*replaced by saveAsPNG(File file) </p><p>**/ </p><p>@Deprecated </p><p>public void saveToFile(File file) throws IOException{ </p><p>ImageIO.write(getPickedImage(),defaultImageFormater,file); </p><p>} </p><p>/**儲存為一個檔案,為PNG格式*/ </p><p>public void saveAsPNG(File file) throws IOException { </p><p>ImageIO.write(getPickedImage(),"png",file); </p><p>} </p><p>/**儲存為一個JPEG格式影像檔*/ </p><p>public void saveAsJPEG(File file) throws IOException { </p><p>ImageIO.write(getPickedImage(),"JPEG",file); </p><p>} </p><p>/**寫入一個OutputStream*/ </p><p>public void write(OutputStream out) throws IOException{ </p><p>ImageIO.write(getPickedImage(),defaultImageFormater,out); </p><p>} </p><p>//singleton design pattern </p><p>private static ScreenCapture defaultCapturer = new ScreenCapture(); </p><p>private int x1,y1,x2,y2; </p><p>private int recX,recY,recH,recW; //截取的映像 </p><p>private boolean isFirstPoint = true; </p><p>private BackgroundImage labFullScreenImage = new BackgroundImage(); </p><p>private Robot robot; </p><p>private BufferedImage fullScreenImage; </p><p>private BufferedImage pickedImage; </p><p>private String defaultImageFormater = "png"; </p><p>private JDialog dialog = new JDialog(); </p><p>} </p><p>/**顯示圖片的Label*/ </p><p>class BackgroundImage extends JLabel{ </p><p>public void paintComponent(Graphics g) { </p><p>super.paintComponent(g); </p><p>g.drawRect(x,y,w,h); </p><p>String area = Integer.toString(w)+" * "+ Integer.toString(h); </p><p>g.drawString(area,x+(int)w/2-15,y+(int)h/2); </p><p>g.drawLine(lineX,0,lineX,getHeight()); </p><p>g.drawLine(0,lineY,getWidth(),lineY); </p><p>} </p><p>public void drawRectangle(int x,int y,int width,int height) { </p><p>this.x = x; </p><p>this.y = y; </p><p>h = height; </p><p>w = width; </p><p>repaint(); </p><p>} </p><p>public void drawCross(int x,int y) { </p><p>lineX = x; </p><p>lineY = y; </p><p>repaint(); </p><p>} </p><p>int lineX,lineY; </p><p>int x,y,h,w; </p><p>}<br />  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.