pc端获取android的截屏

来源:互联网 发布:网络正常,但网页打不开 编辑:程序博客网 时间:2024/05/16 10:17

                                                 pc端获取android的截屏

原理:

     通过在PC端获取android端的截图。主要是通过利用ddmlib中提供的方法进行获取。

      需要应用sdk工具包ddmlib.jar.



import com.android.ddmlib.AdbCommandRejectedException;


import com.android.ddmlib.AndroidDebugBridge;


import com.android.ddmlib.IDevice;


import com.android.ddmlib.RawImage;


import com.android.ddmlib.TimeoutException;


 


import java.awt.image.BufferedImage;


import java.awt.image.RenderedImage;


import java.io.File;


import java.io.IOException;


 


import javax.imageio.ImageIO;


 


public class Jietu {


    


     public static void main(String[] args)


     {


         


         AndroidDebugBridge.init(false /* debugger support */);


 


         AndroidDebugBridge bridge = AndroidDebugBridge.createBridge(


                     "E:\\work\\soft\\android-sdk-windows\\android-sdk-windows\\tools\\adb.exe", true /* forceNewBridge */);


         IDevice device;  


 


         waitDeviceList(bridge);  


                   


         IDevice devices[] = bridge.getDevices();  


         device = devices[0]; 


         


         try {


            RawImage rawScreen = device.getScreenshot();


            


            saveImage(rawScreen);


            


        } catch (TimeoutException e) {


            // TODO Auto-generated catch block


            e.printStackTrace();


        } catch (AdbCommandRejectedException e) {


            // TODO Auto-generated catch block


            e.printStackTrace();


        } catch (IOException e) {


            // TODO Auto-generated catch block


            e.printStackTrace();


        }  


         


     }


     


     


     private static void waitDeviceList(AndroidDebugBridge bridge) {  


         int count = 0;  


         while (bridge.hasInitialDeviceList() == false) {   


            try {  


            Thread.sleep(100); // 如果没有获得设备列表,则等待  


            count++;  


            } catch (InterruptedException e) {}  


            if (count > 300) {    // 设定时间超过300×100 ms的时候为连接超时  


            System.err.print("Time out");  


            break;  


            }  


         }  


     } 


     


     


     private static void saveImage(RawImage rawScreen)


     {


         if(rawScreen != null){  


             BufferedImage image = null; 


             boolean landscape=false;


             //横屏竖屏


//             int width2 = landscape ? rawScreen.height : rawScreen.width;  


//             int height2 = landscape ? rawScreen.width : rawScreen.height;  


             int width2 = rawScreen.width;  


             int height2 = rawScreen.height; 


             if (image == null) {  


                 image = new BufferedImage(width2, height2,  


                         BufferedImage.TYPE_INT_RGB);  


             } else {  


                 if (image.getHeight() != height2 || image.getWidth() != width2) {  


                     image = new BufferedImage(width2, height2,  


                             BufferedImage.TYPE_INT_RGB);  


                 }  


             }  


               


             int index = 0;  


             int indexInc = rawScreen.bpp >> 3;  


             for (int y = 0; y < rawScreen.height; y++) {  


                 for (int x = 0; x < rawScreen.width; x++, index += indexInc) {  


                     int value = rawScreen.getARGB(index);  


                     if (landscape)  


                         image.setRGB(y, rawScreen.width - x - 1, value);  


                     else  


                         image.setRGB(x, y, value);  


                 }  


             }     


             try {


                ImageIO.write((RenderedImage)image,"PNG",new File("D:/temp.jpg"));


            } catch (IOException e) {


                // TODO Auto-generated catch block


                e.printStackTrace();


            }  


         } 


     }


 


}

0 0