保存framebuffer数据为图片

保存framebuffer数据为图片  

  保存framebuffer数据为图片  



今天碰到一个问题,需要抓取屏幕上画面,保存为图片。用相机拍?拍得还不清晰。用软件抓?这是一个小系统,底层为kernel,应用层只有busybox和一个GUI程序,没有软件可以用来抓屏。我能想到的只有从framebuffer下手了,而且这也是一个非常有趣的方法。


用google搜索了一下,找到了一个方法:
http://www.cnx-software.com/2010/07/18/how-to-do-a-framebuffer-screenshot/


这里先将framebuffer中数据存为raw data:
cat /dev/graphics/fb0 > /data/screen.raw
(视framebuffer驱动不同,有可能为/dev/fb0或其他)


然后用一个perl脚本调用pnmtopng来转换:
./iraw2png 640 480 < screen.raw > screen.png


iraw2png脚本内容:
#!/usr/bin/perl -w


$w = shift || 240;
$h = shift || 320;
$pixels = $w * $h;


open OUT, "|pnmtopng" or die "Can't pipe pnmtopng: $!\n";


printf OUT "P6%d %d\n255\n", $w, $h;


while ((read STDIN, $raw, 2) and $pixels--) {
   $short = unpack('S', $raw);
   print OUT pack("C3",
      ($short & 0xf800) >> 8,
      ($short & 0x7e0) >> 3,
      ($short & 0x1f) << 3);
}


close OUT;


问题是:我的系统上也没有perl解释器和netpbm工具包(包含pnmtopng),怎么办?呵呵,可以直接将抓取的raw data传送到我的linux主机上处理:
# adb pull /data/screen.raw .
# ./iraw2png 800 480 < screen.raw > screen.png


screen.png就是清晰的屏幕抓图

今天碰到一个问题,需要抓取屏幕上画面,保存为图片。用相机拍?拍得还不清晰。用软件抓?这是一个小系统,底层为kernel,应用层只有busybox和一个GUI程序,没有软件可以用来抓屏。我能想到的只有从framebuffer下手了,而且这也是一个非常有趣的方法。

用google搜索了一下,找到了一个方法:
这里先将framebuffer中数据存为raw data:
cat /dev/graphics/fb0 > /data/screen.raw
(视framebuffer驱动不同,有可能为/dev/fb0或其他)

然后用一个perl脚本调用pnmtopng来转换:
./iraw2png 640 480 < screen.raw > screen.png

iraw2png脚本内容:
#!/usr/bin/perl -w

$w = shift || 240;
$h = shift || 320;
$pixels = $w * $h;

open OUT, "|pnmtopng" or die "Can't pipe pnmtopng: $!\n";

printf OUT "P6%d %d\n255\n", $w, $h;

while ((read STDIN, $raw, 2) and $pixels--) {
   $short = unpack('S', $raw);
   print OUT pack("C3",
      ($short & 0xf800) >> 8,
      ($short & 0x7e0) >> 3,
      ($short & 0x1f) << 3);
}

close OUT;

问题是:我的系统上也没有perl解释器和netpbm工具包(包含pnmtopng),怎么办?呵呵,可以直接将抓取的raw data传送到我的linux主机上处理:
# adb pull /data/screen.raw .
# ./iraw2png 800 480 < screen.raw > screen.png

screen.png就是清晰的屏幕抓图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值