1)    bmp图片的特点 :没有压缩--》54字节头+像素颜色信息(BGR)。每个像素点占3字节
    图片显示原理:图片是由一个个像素点组成的,每个像素点都有自己到颜色值,颜色值在计算机中采用RGB(红绿蓝三原色)表示
    显示图像就是把图片中每个像素点填充到液晶屏对应的位置(位置不要错乱就行了)
    液晶屏:每个像素点占4个字节,分别表ARGB的值, A表示透明度

2)具体实现思路
第一步:打开你要显示的800*480大小的bmp图片
    open()
    open("/dev/fb0")//打开开发板液晶屏的驱动
第二步:读取bmp图片的像素点的颜色值(颜色值大小如何计算)
    char bmpbuf[800*480*3]
    lseek(跳过起始位置的54字节)
    read(bmpbuf)  //800*480*3字节,从55字节开始读取
第三步:把读取的颜色值填充(写入)到开发板的液晶屏上
    由于开发板的液晶屏每个像素点占4个字节,跟bmp图片像素点占用的字节数不匹配(顺序也不对)
    思路:可以通过左移加位或运算拼接数据
    write()
第四步:关闭图片和液晶屏

3)需要解决的问题
问题一:write显示bmp图片,效率低,显示速度慢,不流畅 --》内存映射mmap
问题二:任意位置显示任意大小的bmp图片 --》读bmp头部信息(54字节)获取宽、高

#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h> //内存映射显示bmp图片,图片的起始位置(x,y)
int show_bmp(char *bmp_name,int x,int y)
{int i,j;char A,R,G,B;//打开bmp图片int fd_bmp=open(bmp_name,O_RDWR);if(-1==fd_bmp){perror("open bmp failed!\n");return -1;}//读取bmp图片头部,获取宽度、高度char head[54]={0};//bmp图片头部54字节read(fd_bmp,head,54);int wid=head[21]<<24|head[20]<<16|head[19]<<8|head[18];//宽度int high=head[25]<<24|head[24]<<16|head[23]<<8|head[22];//高度int n=(4-wid*3%4)%4;//bmp字节对齐-》在每行的末尾填充n字节的垃圾信息//读取bmp图片数据char bmp[wid*3]; //存一行数据(BGR)int bmp_buf[wid*high];  //ARGBfor(i=0;i<high;i++){read(fd_bmp,bmp,wid*3);//读取一行for(j=0;j<wid;j++){A=0x00;  //透明度B=bmp[j*3];G=bmp[j*3+1];R=bmp[j*3+2];//把3字节BGR的bmp格式==》4字节ARCB的bmp格式bmp_buf[i*wid+j]=A<<24|R<<16|G<<8|B;}lseek(fd_bmp,n,SEEK_CUR);//跳过每行末尾填充的冗余字节}//图片上下颠倒(垂直镜像)int bmp_temp[wid];//存一行数据(ARGB)for(i=0;i<high/2;i++){memcpy(bmp_temp,&bmp_buf[(high-1-i)*wid],wid*4);memcpy(&bmp_buf[(high-1-i)*wid],&bmp_buf[i*wid],wid*4);memcpy(&bmp_buf[i*wid],bmp_temp,wid*4);}//打开LCDint fd_lcd=open("/dev/fb0",O_RDWR);if(-1==fd_lcd){perror("open lcd failed!\n");return -1;}//打开内存映射int *lcd_map=mmap(NULL,800*480*4,PROT_WRITE,MAP_SHARED,fd_lcd,0);if(NULL==lcd_map){perror("mmap lcd failed\n");return -1;}//显示bmp图片:不显示宽超出800、高超出480的部分for(j=x;j<x+wid && j<800;j++){for(i=y;i<y+high && i<480;i++){lcd_map[i*800+j]=bmp_buf[(i-y)*wid+j-x];}}//关闭文件munmap(lcd_map,800*480*4);close(fd_bmp);close(fd_lcd);
}int main(int argc,char **argv)
{show_bmp("1.bmp",0,0);sleep(2);show_bmp("2.bmp",600,300);return 0;
}

在开发板显示24位的bmp格式图片相关推荐

  1. c语言读取24位bmp图像,[原创]在TC下显示24位真彩色BMP位图

    [原创]在TC下显示24位真彩色BMP位图 在TC下显示24位BMP 虽然在TC显示24位图像上的速度远远比不上256色的速度快,但是真彩色色彩带给我们的视觉上的冲击是256色远远不能达到的.我们今天 ...

  2. linux开发板显示百叶窗图片,03Linux命令操作2

    第一天 第一个小时嵌入式介绍,何为嵌入式,为什么学习嵌入式,嵌入式的发展前景,嵌入式的具体工作岗位以及薪资待遇如何. 第二个小时项目介绍 1.为什么需要项目的的沉淀,企业需要什么样的嵌入式开发人才 2 ...

  3. zigbee无线传感网实训---zigbee显示温湿度以及连接LCD开发板显示温湿度(The Eighth day)

    承接第七天:zigbee无线传感网实训---实现LCD开发板播放音乐并切换歌曲(The Seventh day) 一.实验准备器材如图:              二:步骤 ============= ...

  4. C语言 BMP24位变单色,怎么将24位色BMP图片改为单色或16色?(2)

    当前位置:我的异常网» VC/MFC » 怎么将24位色BMP图片改为单色或16色? 怎么将24位色BMP图片改为单色或16色?(2) www.myexceptions.net  网友分享于:2013 ...

  5. 纯C++实现24位bmp格式图片的读取和修饰

    问题:现有一张bmp图片,要求将它读取到程序中并进行灰度化.水平翻转.模糊.茶色滤镜四种效果的一种,并输出新图片,如下所示: 命令行输入: 其中: 参数1:-b/g/s/r,先后表示blur(模糊), ...

  6. 【数字图像处理】一.MFC详解显示BMP格式图片

    本文主要是讲述<数字图像处理>系列栏目中的第一篇文章.主要详细介绍了BMP图片格式,同时使用C++和MFC显示BMP格式,主要结合自己的<数字图像处理>课程和以前的项目叙述讲解 ...

  7. MFC详解显示BMP格式图片

    本文主要是讲述<数字图像处理>系列栏目中的第一篇文章.主要详细介绍了BMP图片格式,同时使用C++和MFC显示BMP格式,主要结合自己的<数字图像处理>课程和以前的项目叙述讲解 ...

  8. android 将bitmap存为 bmp格式图片大小,把bitmap保存成 BMP的格式 并且位深度为1

    生成图片的要求:图像格式采用单色位图文件格式(BMP)  要求bmp的位深度为1 参考: 代码有点小瑕疵 : bitmap的图片宽度要求是:8的整数倍 /** * 将Bitmap存为 .bmp格式图片 ...

  9. c语言实现pdf显示图片,C语言读取BMP格式图片.pdf

    C语言读取BMP格式图片 C 语言读取BMP 格式图片 以下摘自维基百科,自由的百科全书 BMP 取自位图BitMaP 的缩写,也称为DIB (与设备无关的位图)是微软视窗图形 子系统(Graphic ...

  10. 负数显示红字html语言,需要将单元格内的负数显示为红色且不带负号显示两位小数的格式代码是下面哪一种A、 0.00;[红色...

    需要将单元格内的负数显示为红色且不带负号显示两位小数的格式代码是下面哪一种A. 0.00;[红色 更多相关问题 SPEC性能测试能比时钟频率更全面地反映计算机处理器.存储结构和编译器的性能.它有两种表 ...

最新文章

  1. List常用方法总结 遍历集合的方法
  2. 五分钟教会你函数式编程与闭包
  3. hdu5643 King's Game(约瑟夫环+线段树)
  4. java的知识点13——多态、对象的转型(casting)、final关键字、抽象方法和抽象类、接口的作用、如何定义和使用接口?、接口的多继承、面向接口编程
  5. android webview 禁止放大缩小,WebView无法放大缩小解决方案
  6. Scala:First Steps in Scala
  7. 数学建模 层次分析法
  8. Luogu 1019 单词接龙
  9. 无需第三方,使用Mac预览合并多张图片
  10. 找到软件供应链的薄弱链条
  11. MongoDB 生态 – 可视化管理工具
  12. 3D游戏引擎入门课程——场景渲染
  13. python将pdf转图片_利用Python将pdf转为图片
  14. geany配置html5,Geany的教程
  15. 进程间通信的方式及原理
  16. Some Questions about MapReduce
  17. 详解 16 个 Pandas 读与写函数
  18. Vultr删除信用卡
  19. 艾永亮:超级产品战略告诉你,怎样才能吸引到用户使用你的产品
  20. 制作价目表,用小程序快速制作属于自己的价目表

热门文章

  1. Vbs脚本编程简明教程之十五
  2. 摩拜、ofo抢着用的NB-IoT技术,听说你还不知道!?
  3. 康奈尔大学做笔记的方法——文献
  4. OBS直播如何连麦和多人连麦
  5. 台式计算机调亮度,台式电脑显示器屏幕亮度怎么调节?
  6. m3u8视频通用下载器
  7. 规则引擎drools教程一
  8. 【Linux】下载暂停后如何恢复
  9. [读书笔记] 有效竞品分析
  10. Java 将中文文件名称修改为拼音首字母、拼音全称(附GitHub)