在PC端實現Android應用截屏的源代碼

fmms 12年前發布 | 26K 次閱讀 Android Android開發 移動開發

我們有時候只是需要截圖,沒必要連DDMS一起開,所以剝離了截圖的代碼,當然,并不是原生的啊,是根據原理自己寫的,供大家參考

第一步,準備庫包

     我們既然是按照DDMS的方法截圖,就需要用到ddmlib.jar這個包,它位于android的SDK目錄的tools/lib下,我們需要把它加入到我們

的Eclipse工程的build path下。

第二步,建立連接,獲取設備

     有了ddmlib,我們就可以使用里面的 AndroidDebugBridge 類來獲取已經同步的設備的列表并建立連接

IDevice device;
AndroidDebugBridge bridge = AndroidDebugBridge.createBridge();
waitDeviceList(bridge);

IDevice devices[] = bridge.getDevices();
device = devices[0]; </pre>

上面的代碼用到了一個waitDeviceList(bridge),主要是為了多次嘗試連接,代碼如下
    private static void waitDeviceList(AndroidDebugBridge bridge) {   
        int count = 0;   
        while (bridge.hasInitialDeviceList() == false) {    
           try {   
           Thread.sleep(100); // 如果沒有獲得設備列表,則等待   
           ount++;   
           } catch (InterruptedException e) {}   
           if (count > 300) {    // 設定時間超過300×100 ms的時候為連接超時   
           System.err.print("Time out");   
           break;   
           }   
        }   
    }  

這樣我們就可以獲得一個設備的類,IDevice,其中有一個getScreenshot()方法獲得屏幕截圖,類型為RawImage
RawImage rawScreen = device.getScreenshot(); 

后面的方法就和Android無關了,純粹的轉換,Rawimage轉換到bufferedimage,再保存
if(rawScreen != null){
BufferedImage image = null;
int width2 = landscape ? rawScreen.height : rawScreen.width;
int height2 = landscape ? rawScreen.width : 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);   
    }   
}      
ImageIO.write((RenderedImage)image,"PNG",new File("D:/temp.jpg"));   
} </pre> <p></p>

文章出處:http://blog.csdn.net/ericahdu/article/details/6496826

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!