基于Android系统的屏幕截图方法及终端的制作方法_3

文档序号:9524042阅读:来源:国知局
储路径读取所述终端的屏幕数据。
[0077]可以理解的是,所述Screencap中的信息包括:所述终端屏幕对应的原始的屏幕数据、所述终端屏幕X、y分辨率(xRes, yRes)、每个像素点的位数(bits_per_pixel)、红绿蓝RGB颜色对于像素点的位移(red.0ffset、green.0ffset、blue.0ffset)以及RGB颜色对于像素点的位宽(red.length、green, length、blue, length)等。其中,所述终端屏幕对应的原始的屏幕数据具体是指接收到输入指令时,当前终端屏幕对应的原始的屏幕数据。
[0078]其中,依照所述Screencap存储路径读取所述终端的屏幕数据,是指,从所述Screencap中读取所述终端的屏幕数据,具体地可以为,根据所述Screencap中的所述终端屏幕x、y分辨率、每个像素点的位数、红绿蓝RGB颜色对于像素点的位移以及RGB颜色对于像素点的位宽等Screencap信息的设置,从所述Screencap中读取所述终端的屏幕数据。
[0079]依照所述Screencap存储路径读取所述终端的屏幕数据后,执行步骤S305。
[0080]在步骤S304b中,若不存在Screencap存储路径,则依照Framebuffer存储路径读取所述终端的屏幕数据。
[0081]可以理解的是,依照Framebuffer存储路径读取所述终端的屏幕数据,是指,从所述Framebuffer中读取所述终端的屏幕数据,具体地可以为,根据所述Framebuffer中的所述终端屏幕X、y分辨率、Framebuffer本身缓存设置的行宽度、每个像素点的位数、红绿蓝RGB颜色对于像素点的位移以及RGB颜色对于像素点的位宽等Framebuffer信息的设置,从所述Framebuffer中读取所述终端的屏幕数据。
[0082]优选的,在依照Framebuffer存储路径读取所述终端的屏幕数据的过程中,以避免采用读取的屏幕数据而压缩的图片产生失真,执行步骤S306。
[0083]在步骤S305中,对获取的所述屏幕数据进行压缩,生成所述屏幕数据对应的屏幕截图。
[0084]将经读取输出的所述终端屏幕对应的原始的屏幕数据,进行压缩处理,以生成与所述屏幕数据对应的屏幕截图。
[0085]优选地,调用预设的图片处理数据库,并根据预设的压缩图片的尺寸和预设的压缩图片的质量对获取的屏幕数据进行压缩,生成所述屏幕数据对应的屏幕截图并保存。
[0086]可以理解的是,所述图片处理数据库可以预先设置在所述终端中,其中,所述图片处理数据库可以优选为libjpeg/libpng数据库;所述压缩图片的尺寸以及所述压缩图片的质量可以预先设置在所述终端中,也可以根据当前具体场景,由终端用户自定义设置,此处不作具体限定。
[0087]在步骤S306中,对读取的所述屏幕数据进行修正处理,生成修正后的屏幕数据。
[0088]可以理解的是,虽然从Framebuffer中直接读取屏幕数据,这种方式优点是速度快,但是可能会存在失真问题,如由于屏幕图片像素点排列混乱而造成的花屏现象和/或由于屏幕图片RGB通道混乱而造成的红屏现象等。
[0089]基于此,本发明对读取的所述屏幕数据进行RGB通道排序修正和/或行像素修正处理,生成修正后的屏幕数据,以解决所述红屏现象和/或花屏现象。
[0090]在步骤S307中,对所述修正后的屏幕数据进行压缩,生成所述屏幕数据对应的屏眷截图。
[0091]将经读取输出的所述终端屏幕对应的原始的屏幕数据,修正后进行压缩处理,以生成与所述屏幕数据对应的屏幕截图。
[0092]优选地,调用预设的图片处理数据库,并根据预设的压缩图片的尺寸和预设的压缩图片的质量对所述修正后的屏幕数据进行压缩,生成所述屏幕数据对应的屏幕截图并保存。
[0093]可以理解的是,所述图片处理数据库可以预先设置在所述终端中,其中,所述图片处理数据库可以优选为libjpeg/libpng数据库;所述压缩图片的尺寸以及所述压缩图片的质量可以预先设置在所述终端中,也可以根据当前具体场景,由终端用户自定义设置,此处不作具体限定。
[0094]需要说明的是,在该实施例中,所述Screencap或所述Framebuffer中的提供的信息可以根据现有进行具体确定,实施例中仅为举例而列举一部分信息;并且,两者对信息的存储形式是不一致的,例如,两者都存储有终端屏幕对应的原始的屏幕数据,但是数据的存储方式不一样;又如,两者都提供了红绿蓝RGB颜色对于像素点的位移的信息,但是该信息的具体设置是不一样的,此处不作具体描述。
[0095]另外,从所述Screencap或从所述Framebuffer读取屏幕数据的过程,均可以根据现有技术进行实现;比如,以从所述Framebuffer读取屏幕数据为例,将Framebuffer设备打开,获取Framebuffer的信息,如根据上述的Framebuffer本身缓存设置的行宽度、终端屏幕X、y分辨率、每个像素点的位数,计算出终端屏幕的数据长度,最后将Framebuffer中对应长度的数据,通过mmap的方式,直接映射进内存。
[0096]由上述可知,本实施例提供的基于Android系统的屏幕截图方法应用于安装Android系统的终端,本实施例获取终端的版本信息和存储路径信息,并将所述版本信息与预设版本进行比较,若所述版本信息在所述预设版本以上且所述终端中存在Screencap存储路径,则依照所述Screencap存储路径读取所述终端的屏幕数据,将屏幕数据压缩保存为本地图片。本发明实施例中,通过对终端的版本信息和存储路径信息进行分析,保证优先从Screencap读取数据,保证生成的截屏图片不失真。进一步的,对于版本信息不在预设版本以上的情况,通过RGB通道排序修正和/或行像素修正的方式,解决从Framebuffer读取数据而导致截屏图片存在失真的问题;进一步的,通过对屏幕数据进行压缩以提高整个截图过程的效率。
[0097]请参阅图4,图4是本发明第三实施例提供的基于Android系统的屏幕截图方法的流程示意图。
[0098]在该实施例中,终端根据版本信息和存储路径信息,确定出所述终端依照帧缓冲Framebuffer存储路径读取所述终端的屏幕数据。即所述终端的版本信息不在所述终端的预设版本以上,或者,所述终端不存在Screencap存储路径,其中所述预设版本为Android系统4.0以上版本。
[0099]所述方法包括:
[0100]在步骤S401中,接收输入指令,所述输入指令用于向安装Android系统的终端请求屏幕截图。
[0101]在步骤S402中,获取所述终端的版本信息和存储路径信息。
[0102]在步骤S403中,根据所述终端的版本信息和存储路径信息,确定依照帧缓冲Framebuffer存储路径读取所述终端的屏幕数据。
[0103]其中,所述终端的版本信息具体指安装的Android系统的版本号信息,所述终端的存储路径信息具体是指所述终端内存在有哪些存储路径。
[0104]在该实施例中,所述终端版本信息不在所述终端的预设版本以上,或者,所述终端不存在Screencap存储路径,在该情况下,所述终端依照Framebuffer存储路径读取所述终端的屏幕数据,其中,Framebuffer的存储路径为“/dev/graphics/fbO”。
[0105]可以理解的是,所述Framebuffer中的信息包括:所述终端屏幕对应的原始的屏幕数据、所述终端屏幕x、y分辨率(xRes, yRes)、Framebuffer本身缓存设置的行宽度(即每行像素点line_length)、每个像素点的位数、红绿蓝RGB颜色对于像素点的位移(red.0ffset、green, offset、blue, offset)以及 RGB 颜色对于像素点的位宽(red.length、green, length、blue, length)等。其中,所述终端屏幕对应的原始的屏幕数据具体是指接收到输入指令时,当前终端屏幕对应的原始的屏幕数据。
[0106]其中,依照Framebuffer存储路径读取所述终端的屏幕数据,是指,从所述Framebuffer中读取所述终端的屏幕数据,具体地可以为,根据所述Framebuffer中的所述终端屏幕x、y分辨率、Framebuffer本身缓存设置的行宽度、每个像素点的位数、红绿蓝RGB颜色对于像素点的位移以及RGB颜色对于像素点的位宽等Framebuffer信息的设置,从所述Framebuffer中读取所述终端的屏幕数据。
[0107]在步骤S404中,对读取的所述屏幕数据进行RGB通道排序修正处理,生成修正后的屏幕数据。
[0108]可以理解的是,在依照Framebuffer存储路径读取所述终端的屏幕数据的过程中,对读取的所述屏幕数据进行修正处理,以避免采用读取的屏幕数据而压缩的图片产生失真,如,避免由于屏幕图片RGB通道混乱而造成的红屏现象。
[0109]优选的,由于在Framebuffer中,正常情况下的RGB通道分布从高到低为BGR,如果不是这个顺序,则屏幕截图后的图片会出现红屏等失真现象。基于这种情况,对所述RGB通道顺序进行检测和调整,可具体的:
[0110]若检测到依照所述Framebuffer存储路径所读取的屏幕数据,其当前的RGB通道顺序不是BGR排列,则将所述RGB通道顺序调整为BGR排列,生成RGB通道排序修正后的屏幕数据;以及
[0111]将所述RGB通道排序修正后的屏幕数据作为修正后的屏幕数据。
[0112]可以理解的是,若检测到当前设置的RGB通道排列错误,即不是BGR排列,则将原始屏幕数据进行位移操作,将RGB的通道顺序重新排序为正确顺序BGR,假如是在像素位数为32位的情况下,具体操作是将R通道位移到0?7位,G通道位移到8?15位,B通道位移到16?23位。
[0113]在步骤S405中,对所述修正后的屏幕数据进行压缩,生成所述屏幕数据对应的屏眷截图。
[0114]将经读取输出的所述终端屏幕对应的原始的屏幕数据,修正后进行压缩处理,以生成与所述屏幕数据对应的屏幕截图。
[0115]优选地,调用预设的图片处理数据库,并根据预设的压缩图片的尺寸和预设的压缩图片的质量对所述修正后的屏幕数据进行压缩,生成所述屏幕数据对应的屏幕截图并保存。
[0116]可以理解的是,所述图片处理数据库可以预先设置在所述终端中,其中,所述图片处理数据库可以优选为libjpeg/libpng数据库;所述压缩图片的尺寸以及所述压缩图片的质量可以预先设置在所述终端中,也可以根
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1