主要使用的是java.util.Robot類來捕獲屏幕,可以實現(xiàn)對屏幕一個矩形區(qū)域的捕獲,通過這個類,我們也可以實現(xiàn)一個遠程桌面控制的程序
Robot.createScreenCapture (Rectangle)
??1 package?com.qiu.util; ??2 import?java.io.*; ??3 import?java.net.*; ??4 import?javax.swing.*; ??5 import?java.awt.*; ??6 import?java.awt.event.*; ??7 import?java.awt.image.*; ??8 import?javax.imageio.*; ??9 import?java.io.*; ?10 ?11 /**?*//**@Author?Qiu_BaiChao ?12 ?*一個簡單的屏幕抓圖 ?13 ?* ?14 ?**/ ?15 ? ?16 public?class?ScreenCapture? { ?17 ?//test?main ?18 ?public?static?void?main(String[]?args)?throws?Exception { ?19 ??String?userdir?=?System.getProperty("user.dir"); ?20 ??File?tempFile?=?new?File("d:","temp.png");? ?21 ??ScreenCapture?capture?=?ScreenCapture.getInstance(); ?22 ??capture.captureImage();?? ?23 ??JFrame?frame?=?new?JFrame(); ?24 ??JPanel?panel?=?new?JPanel(); ?25 ??panel.setLayout(new?BorderLayout()); ?26 ??JLabel?imagebox?=?new?JLabel(); ?27 ??panel.add(BorderLayout.CENTER,imagebox);?? ?28 ??imagebox.setIcon(capture.getPickedIcon()); ?29 ??capture.saveToFile(tempFile); ?30 ??capture.captureImage(); ?31 ??imagebox.setIcon(capture.getPickedIcon()); ?32 ??frame.setContentPane(panel); ?33 ??frame.setSize(400,300); ?34 ??frame.show(); ?35 ??System.out.println("Over"); ?36 ?} ?37 ? ?38 ?private?ScreenCapture()? { ?39 ?? ?40 ??try { ?41 ???robot?=?new?Robot(); ?42 ??} ?43 ??catch(AWTException?e)? { ?44 ???System.err.println("Internal?Error:?"?+?e); ?45 ???e.printStackTrace(); ?46 ??}?? ?47 ??JPanel?cp?=?(JPanel)dialog.getContentPane(); ?48 ??cp.setLayout(new?BorderLayout());?? ?49 ??labFullScreenImage.addMouseListener(new?MouseAdapter()? { ?50 ????public?void?mouseReleased(MouseEvent?evn)? { ?51 ??????isFirstPoint?=?true; ?52 ??????pickedImage?=?fullScreenImage.getSubimage(recX,recY,recW,recH); ?53 ??????dialog.setVisible(false);????? ?54 ????} ?55 ???}); ?56 ??? ?57 ??labFullScreenImage.addMouseMotionListener(new?MouseMotionAdapter()? { ?58 ????public?void?mouseDragged(MouseEvent?evn)? { ?59 ?????if(isFirstPoint)? { ?60 ??????x1?=?evn.getX(); ?61 ??????y1?=?evn.getY(); ?62 ??????isFirstPoint?=?false;?? ?63 ?????} ?64 ?????else? { ?65 ??????x2?=?evn.getX(); ?66 ??????y2?=?evn.getY(); ?67 ??????int?maxX?=?Math.max(x1,x2); ?68 ??????int?maxY?=?Math.max(y1,y2); ?69 ??????int?minX?=?Math.min(x1,x2); ?70 ??????int?minY?=?Math.min(y1,y2); ?71 ??????recX?=?minX; ?72 ??????recY?=?minY; ?73 ??????recW?=?maxX-minX; ?74 ??????recH?=?maxY-minY; ?75 ??????labFullScreenImage.drawRectangle(recX,recY,recW,recH);???? ?76 ?????} ?77 ????} ?78 ???? ?79 ????public?void?mouseMoved(MouseEvent?e)? { ?80 ?????labFullScreenImage.drawCross(e.getX(),e.getY()); ?81 ????} ?82 ???}); ?83 ??? ?84 ??cp.add(BorderLayout.CENTER,labFullScreenImage); ?85 ??dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); ?86 ??dialog.setAlwaysOnTop(true); ?87 ??dialog.setMaximumSize( ?88 ???Toolkit.getDefaultToolkit().getScreenSize()); ?89 ??dialog.setUndecorated(true); ?90 ??dialog.setSize(dialog.getMaximumSize()); ?91 ??dialog.setModal(true); ?92 ?} ?93 ?//Singleton?Pattern ?94 ?public?static?ScreenCapture?getInstance()? { ?95 ??return?defaultCapturer; ?96 ?} ?97 ?/**?*//**捕捉全屏慕*/ ?98 ?public?Icon?captureFullScreen()? { ?99 ??fullScreenImage?=?robot.createScreenCapture(new?Rectangle( 100 ???Toolkit.getDefaultToolkit().getScreenSize())); 101 ??ImageIcon?icon?=?new?ImageIcon(fullScreenImage); 102 ??return?icon; 103 ?} 104 ?/**?*//**捕捉屏幕的一個矯形區(qū)域 105 ??*/ 106 ?public?void?captureImage()? { 107 ??fullScreenImage?=?robot.createScreenCapture(new?Rectangle( 108 ???Toolkit.getDefaultToolkit().getScreenSize())); 109 ??ImageIcon?icon?=?new?ImageIcon(fullScreenImage); 110 ??labFullScreenImage.setIcon(icon);?? 111 ??dialog.setVisible(true);? 112 ?} 113 ?/**?*//**得到捕捉后的BufferedImage*/? 114 ?public?BufferedImage?getPickedImage()? { 115 ??return?pickedImage; 116 ?} 117 ?/**?*//**得到捕捉后的Icon*/? 118 ?public?ImageIcon?getPickedIcon()? { 119 ??return?new?ImageIcon(getPickedImage()); 120 ?} 121 ?/**?*//**儲存為一個文件,為PNG格式 122 ??*@deprecated 123 ??*replaced?by?saveAsPNG(File?file) 124 ??**/ 125 ?@Deprecated 126 ?public?void?saveToFile(File?file)?throws?IOException { 127 ??ImageIO.write(getPickedImage(),defaultImageFormater,file); 128 ?} 129 ?/**?*//**儲存為一個文件,為PNG格式*/ 130 ?public?void?saveAsPNG(File?file)?throws?IOException? { 131 ??ImageIO.write(getPickedImage(),"png",file); 132 ?} 133 ?/**?*//**儲存為一個JPEG格式圖像文件*/ 134 ?public?void?saveAsJPEG(File?file)?throws?IOException? { 135 ??ImageIO.write(getPickedImage(),"JPEG",file); 136 ?} 137 ? 138 ?/**?*//**寫入一個OutputStream*/ 139 ?public?void?write(OutputStream?out)?throws?IOException { 140 ??ImageIO.write(getPickedImage(),defaultImageFormater,out); 141 ?} 142 ? 143 ?//singleton?design?pattern 144 ?private?static?ScreenCapture?defaultCapturer?=?new?ScreenCapture();? 145 ?private?int?x1,y1,x2,y2; 146 ?private?int?recX,recY,recH,recW;?//截取的圖像 147 ?private?boolean?isFirstPoint??=?true; 148 ?private?BackgroundImage?labFullScreenImage?=?new?BackgroundImage(); 149 ?private?Robot?robot; 150 ?private?BufferedImage?fullScreenImage; 151 ?private?BufferedImage?pickedImage; 152 ?private?String?defaultImageFormater?=?"png"; 153 ?private?JDialog?dialog?=?new?JDialog(); 154 } 155 156 /**?*//**顯示圖片的Label*/ 157 class?BackgroundImage?extends?JLabel { 158 ?public?void?paintComponent(Graphics?g)? { 159 ??super.paintComponent(g); 160 ??g.drawRect(x,y,w,h); 161 ??String?area?=?Integer.toString(w)+"?*?"+?Integer.toString(h); 162 ??g.drawString(area,x+(int)w/2-15,y+(int)h/2); 163 ??g.drawLine(lineX,0,lineX,getHeight()); 164 ??g.drawLine(0,lineY,getWidth(),lineY); 165 ?} 166 ? 167 ?public?void?drawRectangle(int?x,int?y,int?width,int?height)? { 168 ??this.x?=?x; 169 ??this.y?=?y; 170 ??h?=?height; 171 ??w?=?width; 172 ??repaint(); 173 ?} 174 ? 175 ?public?void?drawCross(int?x,int?y)? { 176 ??lineX?=?x; 177 ??lineY?=?y; 178 ??repaint(); 179 ?} 180 ? 181 ?int?lineX,lineY; 182 ?int?x,y,h,w; 183 } 184
|
|
|
導航
統(tǒng)計
- 隨筆: 115
- 文章: 1
- 評論: 86
- 引用: 0
常用鏈接
留言簿(5)
隨筆檔案(115)
網(wǎng)址
搜索
積分與排名
最新評論

閱讀排行榜
評論排行榜
|
|