android截图问题

aSysBang 2013-10-10 11:37:51
对具有root权限的手机,可以通过"/dev/graphics/fb0"来截图

大致的代码如下
FileInputStream in = new FileInputStream("/dev/graphics/fb0");
DataInputStream ds = new DataInputStream(in);
ds.readFully(piex);
for (int m = 0; m < colors.length; m++) {
int b = (piex[m * 4] & 0xFF);
int g = (piex[m * 4 + 1] & 0xFF);
int r = (piex[m * 4 + 2] & 0xFF);
int a = (piex[m * 4 + 3] & 0xFF);
colors[m] = (a << 24) + (r << 16) + (g << 8) + b;
}
return Bitmap.createBitmap(colors, screenWidth, screenHeight, Bitmap.Config.ARGB_8888);


但是发现有的手机正常截图,有的手机截图花屏,有的手机截图出现色差。。。

求高手指导怎么能够通用截图,或者额外再加哪些判断处理

QQ的摇一摇截图时通用的。。。不知道是不是通过jni实现的。。。

...全文
171 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sno_guo 2013-10-23
  • 打赏
  • 举报
回复
如果是全屏截图,而不是截某个区域的话, android提供了screenshot screencap两个命令来截屏, 你看下如果使用就可以了
shunanlove 2013-10-22
  • 打赏
  • 举报
回复
fb0内的RAW数据不是每个设备都一样的 试试这个
public ImageIcon getImageIcon(String targetNum) {
		try {
			// long start = System.currentTimeMillis();
			RawImage rawImage = device.getScreenshot();
			// long end = System.currentTimeMillis();
			// System.out.println("获取屏幕时间:" + (end - start) + "-毫秒");
			BufferedImage image = new BufferedImage(rawImage.width,
					rawImage.height, BufferedImage.TYPE_INT_RGB);
			int index = 0;
			int IndexInc = rawImage.bpp >> 3;
			for (int y = 0; y < rawImage.height; y++) {
				for (int x = 0; x < rawImage.width; x++) {
					int value = rawImage.getARGB(index);
					index += IndexInc;
					image.setRGB(x, y, value);
				}
			}
			return new ImageIcon(image);

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
小强_Obj 2013-10-22
  • 打赏
  • 举报
回复
帮个忙,遇到同样的问题。
小强_Obj 2013-10-22
  • 打赏
  • 举报
回复
楼主解决了么 ?
xwwhiirt 2013-10-10
  • 打赏
  • 举报
回复
我是来学习的

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧