• [转]Android截屏及图片解析


    本文转自:http://hi.baidu.com/zhouhanqing/blog/item/2f76e1c37c0b3c160ff47762.html

    http://blog.sina.com.cn/s/blog_61869e800100g19l.html这篇Android信息采集文章中讲到如下方法:

    ImageData getDeviceImage(Device mDevice) ;

    ImageData 类型封装了我们需要的所有图像信息其中我们使用其


    public byte data[];

    属性涵盖了图像的像素矩阵信息。
    (320*480像素的图像,其data数组的大小是320*480*3+480 byte),
    每个像素由3个色素(红值,绿值和蓝值)构成,且每行行首1个行标识字节。

    在项目中,我们没采用这种方法,也未发现每行行首有什么标识字节。采用的方法是直接从/dev/graphics/fb0读取图像信息,在PC端,可以用adb pull /dev/graphics/fb0 D:\a 将Android手机上当前屏幕信息截回来存到PC中。对于320*480屏幕,该a文件大小为1024K 对于240*320的屏幕 ,a文件大小为620K

    解析图像时,发现该a文件里面包含了几幅图的信息。不过我们只采用了第一幅图。每个像素占2字节RGB565的格式。这样我们就可以按像素解析成我们想要的图片格式。由于BMP效果较好,可以解析成BMP图像。

       解析成BMP时,关键代码如下:首先设置BMP文件头,修改大小以及图片分辨率,然后从a文件中按像素读取rgb值写入BMP像素中。

         sg_BHeader[0x02] = (UCHAR)(m_Width * m_Height * 3 + 0x36) & 0xff;
         sg_BHeader[0x03] = (UCHAR)((m_Width * m_Height * 3 + 0x36) >> 8) & 0xff;
         sg_BHeader[0x04] = (UCHAR)((m_Width * m_Height * 3 + 0x36) >> 16) & 0xff;
         sg_BHeader[0x05] = (UCHAR)((m_Width * m_Height * 3 + 0x36) >> 24) & 0xff;
         sg_BHeader[0x12] = (UCHAR)m_Width & 0xff;
         sg_BHeader[0x13] = (UCHAR)(m_Width >> 8) & 0xff;
         sg_BHeader[0x14] = (UCHAR)(m_Width >> 16) & 0xff;
         sg_BHeader[0x15] = (UCHAR)(m_Width >> 24) & 0xff;
         sg_BHeader[0x16] = (UCHAR)m_Height & 0xff;
         sg_BHeader[0x17] = (UCHAR)(m_Height >> 8) & 0xff;
         sg_BHeader[0x18] = (UCHAR)(m_Height >> 16) & 0xff;
         sg_BHeader[0x19] = (UCHAR)(m_Height >> 24) & 0xff;
    // sg_BHeader[0x34] = (UCHAR)(m_Width * m_Height * 3 ) & 0xff;
    // sg_BHeader[0x35] = (UCHAR)(m_Width * m_Height * 3 >>8) & 0xff;
    // sg_BHeader[0x36] = (UCHAR)(m_Width * m_Height * 3 >>16) & 0xff;
    // sg_BHeader[0x37] = (UCHAR)(m_Width * m_Height * 3 >>24) & 0xff;
         write(bmp, sg_BHeader, sizeof(sg_BHeader));

        for(i = 0; i < m_Height; i++)
         {
             unsigned char *c = p + (m_Height - 1 - i) * m_Width * 2;
             unsigned char cc;
             for(j = 0; j < m_Width * 2; j+=2)
             {
        value = c[j] & 0x00FF;
                 value |= (c[j+1] << 8) & 0x0FF00;
        r = ((value >> 11) & 0x01F) << 3;
                 g = ((value >> 5) & 0x03F) << 2;
        b = ((value >> 0) & 0x01F) << 3;
           outBuffer[index++] = (unsigned char)b;
        outBuffer[index++] = (unsigned char)g;
        outBuffer[index++] = (unsigned char)r;
                
             }
         }
    write(bmp, outBuffer, sizeof(outBuffer));

    建了一个简单的工程,里面包含了图片解析的主要代码,a,b,c是从手机截回来的图片,temp.bmp 是解析出来的图片 下载链接:http://download.csdn.net/source/2618563


  • 相关阅读:
    第四周学习进度总结
    SOA面向服务的架构
    MVC架构模式
    大型网站技术架构阅读笔记01
    Python爬虫出错
    修改安卓的gradle地址后出现cannot resolve symbol ......错误
    一线架构师阅读笔记03
    周进度报告(十)
    周进度报告(九)
    一线架构师阅读笔记02
  • 原文地址:https://www.cnblogs.com/freeliver54/p/2169610.html
Copyright © 2020-2023  润新知