Android下截屏 及 格式转换

2023-11-16

http://wiseideal.iteye.com/blog/1250175

Android下截屏 及 格式转换

  (2011-02-17 11:41:43)
转载
标签:  

it

 
(根据王研科先生的探索)
Android G1手机的色深是16bit, 即R/G/B=5/6/6. 故需要一些特殊处理才能获得其屏幕图像。
我们可以adb登录进入Android手机,先dump出/dev/fb0的内容,然后将dump出的文件拷贝到PC(ubuntu)上用convert命令进行处理。

1. 在Android手机上获取framebuffer内容:
   # cat /dev/graphics/fb0 > /mnt/sdcard/fb0

2. 把文件拷贝到PC上的/tmp目录:
   $ adb pull /mnt/sdcard/fb0 /tmp/fb0

3. 从/tmp/fb0文件中取出第一屏的内容(一般会有2到3屏的内容):
    $ dd bs=307200 count=1 if=/tmp/fb0 of=/tmp/screenshot1.xmp
   这里,手机屏幕分辨率是320*480; 颜色深度为16bit (R/G/B=5/6/5),即2字节; 故有
       320*480*2=307200
   或在shell下执行:
       $ echo $((320*480*2))
  这里得到的图像是pixmap格式的.

4. 这时取到的截屏数据要转成每个颜色值为8bit的raw图像数据:
    原理如下:
int main ( int argc,  char *argv [ ] )
{
     unsigned  short in;        // 16bit
     unsigned  char out [ 3 ];   // 8bit*3
   
     while  (read ( 0, &in,  2 ) ==  2 )  {
        out [ 2 ] =  (in & 0x1f ) <<  3;
        out [ 1 ] =  ( (in >>  5 ) & 0x3f ) <<  2;
        out [ 0 ] =  ( (in >>  11 ) & 0x1f ) <<  3;
        write ( 1, out,  3 );
     }
     return  0;
}
将以上代码编译成执行文件/tmp/565to88后,再执行:
  $ /tmp/565to888 </tmp/screenshot1.xmp >/tmp/screenshot888.xmp
这将把颜色转化为24bit色深。

5.最后把24bit色深的图像转换成PNG格式:
   $ /usr/bin/convert -depth 8 -size 320x480 rgb:screenshot888.xmp  screenshot.png

现在可以用以下命令查看截屏(screenshot.png文件)啦:
  $ /usr/bin/display  screenshot.png



附: HTC HD7上查看截屏:
手机侧:
  # cat /dev/graphics/fb0 > /mnt/sdcard/fb0
PC侧:
$ dd bs=$((480*800*2)) count=2 if=/tmp/fb0 of=/tmp/screenshot1.xmp
$ /tmp/565to888 </tmp/screenshot1.xmp >/tmp/screenshot888.xmp
$ convert -depth 16 -size 480x800 /tmp/screenshot888.xmp /tmp/screenshot888.png
$ display /tmp/screenshot888.png

转载于:https://my.oschina.net/jingxia/blog/697604

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android下截屏 及 格式转换 的相关文章

  • 如何在 Bash 中为数组赋值?

    我正在尝试从文本文件中读取值列表 你好 txt 并将它们存储在一个数组中 counter 0 cat hello txt while read line do Unix Array counter line let counter coun
  • 使用 sed 将 old-link-url 替换为 new-link-url

    我正在 bash 中编写一个脚本 将 old link url 替换为 new link url 我的问题是 sed 由于斜杠而无法替换 url 如果我只输入一些文字就可以了 my code sed e s old link new lin
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • 使用 Jenkins 运行 ios-sim

    我正在尝试使用以下命令从命令行启动我的应用程序ios sim https github com downloads pegli ios sim ios sim xcode4 3 tar gz但这就是我得到的 Started by user
  • linux下如何获取昨天和前天?

    我想在变量中获取 sysdate 1 和 sysdate 2 并回显它 我正在使用下面的查询 它将今天的日期作为输出 bin bash tm date Y d m echo tm 如何获取昨天和前天的日期 这是另一种方法 对于昨天来说 da
  • 如何从 Linux 的 shell 中删除所有以 ._ 开头的文件?

    确实如标题所示 我已将许多文件从 Mac 复制到 Raspberry Pi 这导致了许多以前缀开头的多余文件 我想删除以以下开头的文件夹中的每个文件 我该怎么做 尝试类似的方法 cd path to directory rm rf 或者 如
  • 在powershell中检查文件是否可读且正常

    我是 powershell 新手 我想检查文件是否可读且正常 在 unix 中 我们可以使用 f 和 r 在一行中完成此操作 例如 以下 shell 脚本函数接受文件名作为参数并检查文件的可读性和规律性 与此等效的 powershell 是
  • 列出破折号中当前定义的函数?

    我想列出当前定义的函数dash 有什么办法可以做到这一点吗 我能想到的最接近的是type它可以用来测试一个函数是否存在 但除此之外我很困惑 附 我说的是dash在这里 不是bash or zsh 看看 exec c 似乎没有 没有 表是静态
  • Linux shell 脚本:十六进制数字到二进制字符串

    我正在 shell 脚本中寻找一些简单的方法来将十六进制数字转换为 0 和 1 字符的序列 Example 5F gt 01011111 是否有任何命令或简单的方法来完成它 或者我应该为其编写一些开关 echo ibase 16 obase
  • 如何让“grep”从文件中读取模式?

    假设有一个很大的文本文件 我只想打印与某些模式不匹配的行 显然 我可以使用egrep v patter1 pattern2 pattern3 现在 如果所有这些模式都在一个文本文件中怎么办 最好的制作方法是什么egrep从文件中读取模式 g
  • 如何将 bash 脚本的整个输出保存到文件

    我正在尝试将 bash 脚本的整个输出保存到文件中 我目前在代码开头有一个参数 ip 地址 如下所示 bin bash USAGE Usage 0
  • Bash 脚本大小限制?

    我有一个 bash 脚本 在 RHEL 或 OS X 上运行时出现以下错误 第 62484 行 意外标记 换行符 附近出现语法错误 第 62484 行 o gz 这是一个自动生成的脚本 用于解决我公司使用的 Grid Engine 计算集群
  • 在bash中,是否有相当于“错误消息”的东西

    在 perl 中 您可以使用错误消息退出die some msg bash 中是否有等效的单个命令 现在 我正在使用命令来实现这一点 echo some msg exit 1 你可以很容易地自己推出 die echo 1 gt 2 exit
  • awk: hping: 打印 icmp 发起/接收之间的差异

    我有以下输出hping http ports su net hping在 OpenBSD 上 hping icmp ts www openbsd org HPING www openbsd org re0 129 128 5 194 icm
  • 有一种简单的方法可以忽略时间戳来区分日志文件吗?

    我需要比较两个日志文件 但忽略每行的时间戳部分 确切地说是前 12 个字符 有没有一个好的工具 或者一个聪明的 awk 命令 可以帮助我 根据您使用的 shell 您可以改变方法 Blair https stackoverflow com
  • 在 bash 中使用单个命令为 shell 变量分配默认值

    我对 bash 3 00 shell 脚本中的变量进行了大量测试 如果未设置变量 则它会分配默认值 例如 if z VARIABLE then FOO default else FOO VARIABLE fi 我似乎记得有一些语法可以在一行
  • 如何使用shell脚本从json字符串中grep特定字段值[重复]

    这个问题在这里已经有答案了 下面是文件中可用的 JSON 字符串 我需要从中提取值status在 shell 脚本中 预期输出 status success 响应 json eventDate null dateProccessed nul
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • 如何查看正在运行的 tcsh 版本?

    如何查看我的 UNIX 终端中运行的 tcsh 的当前版本 看着那 这version多变的 echo version tcsh 6 14 00 Astron 2005 03 25 i386 intel linux options wide
  • 如何以管理员身份在 rake 任务中运行 shell 命令?

    我有一个简短的 cmd 文件 我想将其作为部署过程的一部分运行 不幸的是 cmd 文件需要管理员权限 是否可以从 rake 中获得管理员权限 或者我是否需要以管理员身份启动 shell 您可以尝试runas http ss64 com nt

随机推荐

  • 用c++制作c++

    用c 制作c 我想了半年了 终于成功了 那么接下来我给大家分享一下我用c 制作c 的代码吧 include
  • 免费获取知网文献----浙江图书馆+支付宝

    使用支付宝办理浙江图书馆读者证 在支付宝搜索 浙江图书馆 并进入其生活号 开通借阅服务 办理读者证 使用读者证号登录浙江图书馆官网 通过以上步骤成功办理读者证后 会获取一个读者证号 在支付宝 浙江图书馆 生活号的首页或个人中心可以看到 使用
  • matlab 日期加小时数_matlab建立连续时间的时间函数

    满意答案 dashengjia 推荐于 2016 05 22 采纳率 55 等级 12 已帮助 7603人 这个是内建函数 源码不公开 CUMSUM Cumulative sum of elements For vectors CUMSUM
  • JSON 数据类型转换工具

    简介 本文介绍一款数据类型转换工具 可以将JSON格式数据转换成YAML MYSQL XML TOML JavaScript等数据类型 背景 在日常的开发工程中 我们经常使用JSON表达数据 但有些时候我们需要使用YAML JavaScri
  • Cannot make a static reference to the non-static method getLocalActivityManager()

    Cannot make a static reference to the non static method getLocalActivityManager from the type ActivityGroup 想调用getLocalA
  • Python 异常捕获与处理

    文章目录 一 基础知识 1 1 什么是异常 1 2 异常分类 1 3 异常的结构 二 异常类型 三 异常处理语法结构 3 1 语法结构 3 2 万能异常 3 3 try语法结构结合else和finally 四 异常处理补充 4 1 断言 4
  • Java swing + socket 写的一个五子棋网络对战游戏

    自从开始接触Swing以来 就喜欢写写各种管理系统 写多了就萌生了一种类似于实时在线对战的游戏 经过一番构思后就开始着手设计这个网络对战版本的五子棋了 游戏代码包含两部分 常规的C S模式 C代表客户端 S代表服务端 下载代码后先启动服务器
  • css3颜色渐变:css3如何实现背景颜色渐变?

    为了开发网页的美观 css3背景颜色渐变是经常会用到的 那么 css3背景颜色渐变如何设置呢 本篇文章我们就来介绍关于css颜色渐变背景的设置方法 我们要知道的是css3渐变有两种类型 css3线性渐变和css3径向渐变 下面我们就来看一下
  • C语言基础知识梳理<1>

    1 前言 各位小伙伴现在还在为学习C语言而苦恼吗 接下来我将更新一系列与C语言相关的文章与干货 希望各位小伙伴可以留下自己宝贵的 并持续关注我 真诚点赞 手留余香 2 网站推荐 软件推荐 用gitee 码云 保存自己的代码 自己写完的代码总
  • Visual Studio 2005 安装经验谈

    看到这题目 我都有点不自信 你用了Visual Studio 2005才几天啊 的确 关于编程我还是新手 不过这几天重复进行的Visual Studio 2005安装 到安装失败 再到解决问题 再安装 往返3次 下载Visual Studi
  • JDK 21探秘:引领Java开发新潮流的强大功能

    JDK 21是Java开发工具包的最新版本 它引入了许多令人振奋的新特性 旨在提高开发人员的生产力和代码质量 在本文中 我们将介绍一些JDK 21的新特性 并提供使用示例 以帮助您更好地理解和应用这些功能 一 字符串模板 String Te
  • 当SSC遇见RPA:最大化发挥共享服务模式效用

    作为一种创新的管理模式或战略 共享服务中心 SSC 如今正越来越受到企业的青睐 很多中大型集团 跨国公司都有某种类型的SSC存在 SSC可为企业带来哪些好处 RPA在这其中又是如何发挥作用 共享服务中心 Shared Service Cen
  • MAC版本Mysql数据库忘记密码解决教程

    MAC初始化安装获取密码 删除Data文件夹内容 并重新生成 rm rf usr local mysql data 初始化再次生成Data文件夹中的内容 初始化完成之后再代码最后生成随机密码需要保存 mysqld initialize us
  • 解决win 10操作系统中图片查看方式没有window7中的照片查看器问题

    1 在桌面新建一个记事本文件 保存为 reg 不能保存为 reg 代表任意 如下图 为我自建的 1 reg 2 保存后 双击打开该文件 并将如下代码拷入 并保存 如下图 2 1 右键该文件用记事本或者notepad 打开 我这里是用note
  • 【C++】C/C++内存管理(new和delete详解)

    目录 1 C C 内存分布 2 C语言中动态内存管理方式 3 C 内存管理方式 3 1 new delete操作内置类型 3 2 new delete操作自定义类型 4 operator new与operator delete函数 4 1
  • 解决width: 100%;再设置margin问题

    最近在做前端 遇到了这么个小问题 就是当我们把一个 div 的 width 设置为 100 之后 再设置 margin 的时候 这个div 莫名其妙的超出了屏幕 情景如下图 这就很难受了啊 不过办法总比困难多 下面 我将讲两种解决方法 方法
  • Python调用文心一言的API

    最近申请了文心一言的key 然后尝试调用了一下文心一言 这里使用一个简单的方式来调用文心一言 pip install paddle pipelines from pipelines nodes import ErnieBot api key
  • 应聘时最漂亮的回答,看后不分享都难啊

    1 请你自我介绍一下自己好吗 回答提示 一般人回答这个问题过于平常 只说姓名 年龄 爱好 工作经验 这些在简历上都有 其实 企业最希望知道的是求职者能否胜任工作 包括 最强的技能 最深入研究的知识领域 个性中最积极的部分 做过的最成功的事
  • python基础总结:1.8、输入输出

    python基础总结 1 8 输入输出 文章目录 python基础总结 1 8 输入输出 1 更漂亮的输出格式 1 1 格式化字符串文字 1 2 字符串的format 方法 1 3 手动格式化字符串 1 4 旧的字符串格式化方法 2 读写文
  • Android下截屏 及 格式转换

    http wiseideal iteye com blog 1250175 Android下截屏 及 格式转换 2011 02 17 11 41 43 转载 标签 it 根据王研科先生的探索 Android G1手机的色深是16bit 即R