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();
}
}
}
}