在PC端實現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();
上面的代碼用到了一個waitDeviceList(bridge),主要是為了多次嘗試連接,代碼如下
device = devices[0]; </pre>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()方法獲得屏幕截圖,類型為RawImageRawImage 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>
本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!