GEC6818开发板显示BMP格式图片

2024-08-22 04:20

本文主要是介绍GEC6818开发板显示BMP格式图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、BMP格式图片

        bmp格式图片是没有经过任何压缩过的图片,缺点是为文件尺寸比较大,不适合传播;优点是文件必须要解码器可以读出来直接使用。

                    

        虽然BMP格式文件内部存储的就是RGB数据,无需任何解码,但毕竟RGB数据是纯数据,没有任何图片尺寸、色深等具体信息,因此我们需要了解BMP的格式头,在BMP格式头中获取图片的相关信息,然后才能正确处理内涵的RGB数据。

2、BMP格式头

BMP文件开头部分是BMP格式头,里面存放了RGB数据的尺寸、分辨率、色深等重要信息。BMP格式头中包含了如下三个结构体:

  • bitmap_header(必有)
  • bitmap_info(必有)
  • rgb_quad(可选,一般没有)

        

struct bitmap_header
{int16_t type;int32_t size; // 图像文件大小int16_t reserved1;int16_t reserved2;int32_t offbits; // bmp图像数据偏移量
}__attribute__((packed));struct bitmap_info
{int32_t size;   // 本结构大小    int32_t width;  // 图像宽int32_t height; // 图像高int16_t planes;int16_t bit_count; // 色深int32_t compression;int32_t size_img; // bmp数据大小,必须是4的整数倍int32_t X_pel;int32_t Y_pel;int32_t clrused;int32_t clrImportant;
}__attribute__((packed));// 以下结构体不一定存在于BMP文件中,除非:
// bitmap_info.compression为真
struct rgb_quad
{int8_t blue;int8_t green;int8_t red;int8_t reserved;
}__attribute__((packed));
  • 上下颠倒

BMP图片中的RGB数据是上下颠倒的,因此文件数据中的最后一行是图像的最上面第一行。需要注意的是,上下是颠倒的,但是左右是正常的,因此在处理数据的时候不能从最后一个字节开始,而是从最末一行的首字节开始。

3、获取bmp图片信息及显示示例代码:

struct bitmap_header
{int16_t type;int32_t size; // 图像文件大小int16_t reserved1;int16_t reserved2;int32_t offbits; // bmp图像数据偏移量
}__attribute__((packed));struct bitmap_info
{int32_t size;   // 本结构大小    int32_t width;  // 图像宽int32_t height; // 图像高int16_t planes;int16_t bit_count; // 色深int32_t compression;int32_t size_img; // bmp数据大小,必须是4的整数倍int32_t X_pel;int32_t Y_pel;int32_t clrused;int32_t clrImportant;
}__attribute__((packed));// 以下结构体不一定存在于BMP文件中,除非:
// bitmap_info.compression为真
struct rgb_quad
{int8_t blue;int8_t green;int8_t red;int8_t reserved;
}__attribute__((packed));struct bmp
{uint32_t size;   //RGB数据大小uint32_t w;      //图像宽度uint32_t h;      //图像高度uint8_t *data;   //图像RGB数据
};void read_bmp_data(const char *pathname, struct bmp *p)
{/******************获取BMP文件数据**********************/FILE *bmp_file = fopen(pathname, "r");if(bmp_file){//读BMP图片属性信息struct bitmap_header file_header;  //文件头struct bitmap_info   info_header;  //信息头fread(&file_header, sizeof file_header, 1, bmp_file);fread(&info_header, sizeof info_header, 1, bmp_file);p->w = info_header.width;p->h = info_header.height;p->size = info_header.size_img;// 读取BMP图像数据(RGB)p->data = calloc(1, info_header.size_img);fread(p->data, info_header.size_img, 1, bmp_file);fclose(bmp_file);}else{printf("打开%s文件失败: %s\n", pathname, strerror(errno));}
}//uint32_t x,uint32_t y为图片坐标
void display_bmp(struct lcd lcd, const char *pathname, uint32_t x, uint32_t y)
{struct bmp tmp;read_bmp_data(pathname, &tmp);int color;// 画图像for (int i = 0; i < tmp.h; i++){for(int j = 0; j < tmp.w; j++){color = tmp.data[((tmp.h-1-i)*tmp.w+j)*3] |        //Btmp.data[((tmp.h-1-i)*tmp.w+j)*3+1]<<8 |   //Gtmp.data[((tmp.h-1-i)*tmp.w+j)*3+2]<<16 |  //R0x00<<24;                                  //ADraw_point(lcd, color, j+x, i+y);    //Draw_point()为在LCD上画点 }}free(tmp.data);
}

这篇关于GEC6818开发板显示BMP格式图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095228

相关文章

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴