当前位置: 首页 > article >正文

笔记整理—linux驱动开发部分(15)BMP图片显示

        图片显示的本章就是二进制文件,文件不是二进制文件就是文本文件,文本文件也可以以二进制的方式打开。

        BMP图片的特征,就是未被压缩的元素位图格式。BMP文件组成为:头信息(图片相关信息)+有效信息(图片数据)。BMP图片识别方式为在头信息中的标识(0x42 4D 开头)。

        图片打开方式:①打开文件;②判断图片格式;③解析头信息得到详细信息;④根据有效信息去核实位置用合适方法提取真正有效信息;⑤将得到的有效数据放入fb中显示。

*((unsigned int *)(buf+0x12))

read(fd,&fHeader,sizeof(fHeader));

         fHeader是头信息结构体,按文件信息排列,顺序去读头信息,顺序存入。

for(i=0;i<sizeof(fHeader);i++)
    printf("%x",*((unsigned char*) &fHeader+i));

        上面的代码用于逐位访问结构体。

typedef struct
    {
        unsigned short
        unsigned long
        unsigned short   
        unsigned short
        unsigned long
}__attribute__((packed,aligned(1)));//1字节对齐

        由于内存对齐会将2字节的short补2字节,会在对齐后产生问题。

struct C/BitMapFileHeader Header __attribute__((aligned(1)));

        上面这是申请时的对齐方法。

struct FileHeader {
    unsigned char a;
    unsigned char b;
    unsigned char c;
    unsigned char d;
}__attribute__((packed,aligned(1)));

int main() {
    struct FileHeader fHeader = {0x12, 0x34, 0x56, 0x78};  // 初始化数据
    
    int i = 2;
    printf("%x\n", *((unsigned char*) &fHeader + i));
    
    return 0;
}

        综合一下举个例子,如上。 

lseek(fb,fHeader,bfoffBits(图片有效信息开始位),SEEK_SET);
read(fd,bmp_buf(数组),len(是Width*Height/3));

        JPG的全名是JPEG,其有效信息位与图像信息无点对点的关系,要通过运算才能实现显示,反推回到位图数据,再放入framebuffer(解码)。

        编码方式对应解码方式(压缩度、算法复杂度、清晰度、时间)。软件编解码方法,代码实现属性运算;硬件编解码方法,代码以硬件运算不用cpu运算且速度更快(SOC Multimedia的相关模块)。

        JPG图片是行刷新,PNG图片是轮廓刷新(越来越清晰)。

        PS:动态库是程序运行时使用的,所以应再程序运行出进行移植。头文件是在编译时使用,所以应该在编译前进行处理移植。静态库是程序编译时使用的。-I是编译选项/预处理选项(CFLAGE/CPPFLAGE),-l是链接选项用于指定link额外的库(xxx.so)(LDFLAGE)(-xxx名字一般为库名),-L链接选项用于执行xxx.so的位置,可不用-l直接-L。动态链接库一般放在三个地方①./lib;②/usr/lib;③任意指定目录,要自己去指定PATH。

        linux文件处理非缓冲方法:利用read/write等API(linux);缓冲方法利用fread/fwrite等函数(c库)。读文件就用带缓冲的接口;读设备就用API。

        libjpeg以行做数据转换单位,以行为一个数组RGB排列(一次解码一行)。

0xffd8是JPEG头文件信息——JPG图片判别
0xffd9是JPEG尾信息——是jpg图片结束的标志

        32位色ARGB,A为透明度alpha。0~255,0表示全透明,255表示不透明。

        PNG图片的头表示为89 50 4E 47 0D 0A 1A 0A.

        


http://www.kler.cn/a/407434.html

相关文章:

  • 由于centos停更,yum、docker等不支持,采用阿里云仓库搭建K8S
  • 鸿蒙操作系统(HarmonyOS)开发的初学者了解和入门
  • C#(11) 运算符重载
  • 《机器人控制器设计与编程》考试试卷**********大学2024~2025学年第(1)学期
  • 中国省级新质生产力发展指数数据(任宇新版本)2010-2023年
  • python文件对象方法
  • 微软安全文章合集
  • Redis进阶Redission实现分布式锁
  • 微信小程序中会议列表页面的前后端实现
  • 模型压缩笔记1:模型量化
  • python正则表达式基本字符字符
  • 【深度学习之回归预测篇】 深度极限学习机DELM多特征回归拟合预测(Matlab源代码)
  • html+js实现图片的放大缩小等比缩放翻转,自动播放切换,顺逆时针旋转
  • 虚拟机苹果OS当中XCode安装后如何增加对ios的支持
  • LLM的原理理解1-5:1、词向量2、词的意义取决于上下文3、将词向量转化为词预测4、​注意力机制​
  • 谈谈Mysql的常见基础问题
  • CSS —— 子绝父相
  • 2023年3月GESPC++一级真题解析
  • PHP实现冒泡排序
  • 第四课 Animation动画资源导入设置检查与优化
  • Flink转换算子——flatMap/map/filter/keyby/reduce综合练习
  • Spring Boot 动态数据源切换
  • apache、iis规则屏蔽拦截ClaudeBot等蜘蛛爬虫抓取网页
  • 营销的本质
  • 3、集线器、交换机、路由器、ip的关系。
  • 传奇996_36——背包图标,物品位置问题