博客
关于我
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/

    你可能感兴趣的文章
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>
    Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
    查看>>
    mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
    查看>>
    mysqldump 参数--lock-tables浅析
    查看>>
    mysqldump 导出中文乱码
    查看>>
    mysqldump 导出数据库中每张表的前n条
    查看>>
    mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
    查看>>
    Mysqldump参数大全(参数来源于mysql5.5.19源码)
    查看>>
    mysqldump备份时忽略某些表
    查看>>
    mysqldump实现数据备份及灾难恢复
    查看>>
    mysqldump数据库备份无法进行操作只能查询 --single-transaction
    查看>>
    mysqldump的一些用法
    查看>>
    mysqli
    查看>>
    MySQLIntegrityConstraintViolationException异常处理
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>
    Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
    查看>>
    mysql_real_connect 参数注意
    查看>>
    mysql_secure_installation初始化数据库报Access denied
    查看>>