1. 程式人生 > >java PC端獲取android手機截圖使用ddmlib

java PC端獲取android手機截圖使用ddmlib

http://blogs.360.cn/360qtest/2014/02/28/%E9%80%9A%E8%BF%87ddmlib%E5%AE%9E%E7%8E%B0%E6%88%AA%E5%9B%BE%E4%BB%A5%E5%8F%8A%E8%8E%B7%E5%8F%96%E6%89%8B%E6%9C%BA%E7%9B%B8%E5%85%B3%E4%BF%A1%E6%81%AF/

ddmlib在sdk tools\libs資料夾下  ddmlib.jar

AndroidDebugBridge.init(false) ;這句話需要呼叫,否則會報錯

import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;


import javax.imageio.ImageIO;


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;




public class Main {


	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;   
	       }   
	    }   
	}  
	
	public static void main(String[] args) {
		IDevice device;   
		AndroidDebugBridge.init(false) ;
		AndroidDebugBridge bridge = AndroidDebugBridge.createBridge("E:\\android-sdk\\platform-tools\\adb.exe" , false);   
		waitDeviceList(bridge);   
		  
		IDevice devices[] = bridge.getDevices();   
		device = devices[0];
		try {
			RawImage rawScreen = device.getScreenshot() ;
			
			if (rawScreen != null) {
				Boolean landscape = false;
				int width2 = landscape ? rawScreen.height : rawScreen.width;
				int height2 = landscape ? rawScreen.width : rawScreen.height;
				BufferedImage image = null ;
				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("f:\\2.png"));
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
		} catch (TimeoutException e) {
			e.printStackTrace();
		} catch (AdbCommandRejectedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

下面是android上獲取截圖的辦法
https://github.com/Yhzhtk/note/issues/7

FileInputStream graphics = null;
            try {
                    graphics = new FileInputStream(“/dev/graphics/fb0”);
            } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    return null;
            }

            DataInputStream dStream = new DataInputStream(graphics);
            dStream.readFully(piex);
            dStream.close();

            int[] colors = new int[screenHeight * screenWidth];
            // 將rgb轉為色值
            for (int m = 0; m < colors.length; m++) {
                    int r = (piex[m * 4] & 0xFF);
                    int g = (piex[m * 4 + 1] & 0xFF);
                    int b = (piex[m * 4 + 2] & 0xFF);
                    int a = (piex[m * 4 + 3] & 0xFF);
                    colors[m] = (a << 24) + (r << 16) + (g << 8) + b;
            }

            Bitmap bitmap = Bitmap.createBitmap(colors, screenWidth, screenHeight,
                            Bitmap.Config.ARGB_8888);

相關推薦

java PC獲取android手機使用ddmlib

http://blogs.360.cn/360qtest/2014/02/28/%E9%80%9A%E8%BF%87ddmlib%E5%AE%9E%E7%8E%B0%E6%88%AA%E5%9B%BE%E4%BB%A5%E5%8F%8A%E8%8E%B7%E5%8F%96

python使用adb獲取Android Phone(解決Windows傳輸編碼導致png檔案損壞的問題)

使用adb命令 ./adb shell screencap -p 可以擷取當前螢幕,並且作為stdout,傳給外部。那麼對於python,我們可以用如下程式碼獲取資料流。 使用Popen建立子程序用於讀取資料流。 import subprocess out=subprocess.Po

android手機

1. 手動截圖,通過其他第三方軟體傳送截圖,或者從手機取出截圖 2. 使用命令截圖,將截圖儲存到手機,再拉取到電腦 #!/bin/sh #執行 sh screenshot name a=$1 if [ ! $a ];then a=`date +"%F_%H%M%S"` fi b='caps'

FrameBuffer中獲取Android螢幕

引子 我們知道,DDMS可以很容易的獲取Android 手機 的螢幕截圖,那麼它是怎麼做到的呢?  其實,android手機上有一個叫做FrameBuffer的裝置,影象資訊都是通過FrameBuffer寫到手機螢幕上去的。因此可以通過讀取此裝置中的資料來獲取當前正在顯示的影象。當然DDMS也是這麼做到

android手機、錄屏

1. 手動截圖,通過其他第三方軟體傳送截圖,或者從手機取出截圖 2. 使用命令截圖,將截圖儲存到手機,再拉取到電腦 #!/bin/sh #執行 sh screenshot name picName=$1 filePath='caps' if [ ! $picName ];then picName=

利用ddmlib 實現 PCandroid手機adb forword socket通訊

上篇文章講了PC與android手機連線的辦法 ,通過java呼叫系統命令執行adb命令操作,實際上是一個比較笨的辦法。 網上查閱資料,發現google 提供了ddmlib庫 (adt-bundle\sdk\tools 目錄下), 提供了adb相關操作的所有api。 文件

Android】WebView核心與XWalk核心獲取螢幕內容總結

1.專案中使用到的截圖方法: public static Bitmap getWebViewContentShot(final View view) { if (view == null) retur

Android獲取View的,包括各種Layout的

Layout生效後才能使用 /** * 獲取Layout截圖 * * @return 所需區域的截圖 */ private Bitmap getBitmap() { rel_content.setDrawing

android-實現手機效果,儲存圖片

一、準備一張圖片 拷貝screenshot_panel.9.png放在目錄drawable-xhdpi下 二、activity_main.xml 程式碼如下: <RelativeLayout xmlns:android="http://schemas.andro

android視訊&手機錄屏實現

問題 在android中有時候我們需要對螢幕進行截圖操作,單一的截圖操作好解決可以通過activity的頂層view DecorView獲取一個bitmap,得到就是當前activity上面的全部檢視。 View view = activity.getWindow().getDecorView();

js如何獲取android手機的電話號碼和聯絡人,並且傳遞給PHP、Java後臺

一、使用cordova代替android和iso、xcode的開發和打包          這裡先說說個人站在web的角度對cordova的一些理解:對於獲取手機的一些原生資訊,如呼叫攝像頭、獲取聯絡人,共享地理位置等,我的第一反應就是肯定要用原生的語言去做,如果js指令碼

android後臺獲取當前螢幕(screencap.cpp修改)

    本文基於android6.0。首先找到screencap在Android原始碼中的位置,若不清楚,可以通過在android目錄下通過命令find . -namescreencap.cpp。本文直接給出路徑/android/frameworks/base/cmds/s

JAVA環境獲取APK資訊(包名,版本,版本號,大小,許可權...),純JAVA語言編寫PC獲取APK資訊

純JAVA環境獲取APK資訊:包名,版本,版本號,大小,許可權... 純Java環境獲取APK資訊需要兩個包:AXMLPrinter2.jar 跟jdom.jar,用於反編譯XML和解析XML的 專案目錄 這個類是獲取APK資訊的 public class ApkUt

Android獲取當前螢幕,簡單粗暴!

獲取當前螢幕截圖的Bitmap物件,然後就可以拿去做你想做的事情,程式碼很簡單。 public static Bitmap captureScreen(Activity activity) { activity.getWindow().getDe

js獲取視頻

ntb tput ini contex segment 透明圖 init append source 參考:https://segmentfault.com/q/1010000006717959問題:a.獲取的好像是第一幀的圖?第一幀為透明圖時,獲取的個透明圖片b.得先

關於Unity實現AR功能(三)AR手機

datetime replace ext adp screen tco 文件 unity directory 1 /************************************************* 2 * 項目名稱:AR截圖 3 * 腳本創建人

Android監測

Android監測截圖 版權宣告:本文為博主原創文章,轉載請註明。 原理分析 Android系統並沒有提供截圖通知相關的API,需要我們自己對Android系統媒體資料庫進行監測,因為使用系統截圖擷取一張圖片都會把這張圖片的詳細資訊加入到這個媒體資料庫,併發出內容改變通知,

全新網際網路Java開發技術思維導

圖文裡的技術如何學習,有沒有免費資料? 知識體系已整理好(原始碼,筆記,PPT,學習視訊),歡迎免費領取。 分享給喜歡Java的,喜歡程式設計,有夢想成為架構師的程式設計師們,希望能夠幫助到你們。 不是Java的程式設計師也沒關係,幫忙轉發給更多朋友!謝謝。

React Native獲取Android手機串號(IMEI碼)

因為專案需要獲取手機imei,所以百度查了下,方法大概如下:  1.在專案根目錄下:      npm install --save react-native-imei 2.然後修改android app src androidMaini

PC上的CAD看軟體如何同時開啟多張CAD圖紙?

PC端上的CAD看圖軟體如何同時開啟多張CAD圖紙?在使用CAD看圖軟體檢視CAD圖紙的時候,一張一張慢慢的開啟檢視實在是減慢了檢視和對圖紙進行編輯的速度,能不能使用CAD看圖同時開啟多張圖紙檔案進行檢視,當然是可以的,今天小編就要來教大家的就是使用CAD看圖同時開啟多張CAD圖紙的全部操作步驟,望採納!