博客
关于我
Android笔记---framebuffer 显示图像文件(QImage方式)
阅读量:788 次
发布时间:2019-03-24

本文共 843 字,大约阅读时间需要 2 分钟。

近期,我在进行AndroidFramebuffer显示16位深度图片的研究,经历了无数个痛苦的→逐步分析如下:

  • 初始化Frame Buffer:首先,我需要访问Android系统中的Framebuffer设备,路径如"/dev/graphics/fb1"。使用C语言的open函数进行读写,这需要root权限。

  • 加载图片:使用Qt的QImage类加载图片,指定源路径。通过qimage.load(imagePath),我可以获得图片的像素数据。需要注意的是,QImage的像素数据格式默认是ARGB8888,顺序是B, G, R,需注意数据排列方向。

  • 转换格式:Frame Buffer主要支持RGB565格式,与16位颜色相符。因此,我需要将QImage的ARGB8888转换为RGB565。具体步骤是:

    • 遍历像素数据,将每个四字节拆分为R、G、B三个分量。
    • 计算每个RGB565编码值:(G >> 3) | (B << 3), (R & 0xF8) | (G >> 5)。
  • 显示到Frame Buffer:使用mmap函数将Frame Buffer的内存区域进行映射,便于直接进行内存操作。然后,通过 memcpy将转换后的像素数据填充至相应位置,注意位移和顺序。

  • 测试与验证

    • 使用颜色常量定义,如RGB565 colormap,测试基础颜色是否正确显示。
    • 输出调试信息,检查图像数据是否读取和转换正确。
  • 优化与解决问题

    • 初次尝试直接写入像素数据发现颜色偏差,需检查QImage的读取方式是否正确。
    • 遇到jpeglib库集成问题,通过交叉编译和路径配置得以解决。
    • 变通方法使用QImage处理后,再次成功将图片显示到Frame Buffer,完成目标。
  • 总结:通过Qt的便捷API和自定义转换逻辑,我最终实现了在16位Frame Buffer上显示高质量图片的能力。这一过程涉猎了Framebuffer内存管理、像素格式转换、软件编程接口应用等多个技术点,提升了嵌入式开发能力。

    转载地址:http://jxokk.baihongyu.com/

    你可能感兴趣的文章
    php注册页面实现注册后跳转页面
    查看>>
    PHP消息队列的实现方式与详解,值得一看
    查看>>
    PHP混合Go协程并发
    查看>>
    php源码中如何添加滚动公告,给WordPress网站添加滚动公告的方法
    查看>>
    PHP源码安装后如何新增模块
    查看>>
    php源码详细安装步骤,linux下php源码安装步骤
    查看>>
    php漏洞tips
    查看>>
    php版Zencoding之 phpstorm
    查看>>
    PHP版本升级5.4手记
    查看>>
    php版本升级总结
    查看>>
    php版本微信公众号开发
    查看>>
    php版的微信公众号开发演示
    查看>>
    php生成html文件的多种方法介绍
    查看>>
    php生成二维码到图片上
    查看>>
    php生成二维码并下载图片(适应于框架)
    查看>>
    PHP生成及获取JSON文件的方法
    查看>>
    PHP生成唯一不重复的编号
    查看>>
    PHP生成器-动态生成内容的数组
    查看>>
    PHP的ip2long和long2ip升级函数
    查看>>
    PHP的json_encode函数应用到微信接口问题(include \uxxxx will create fail)
    查看>>