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

相关文章

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图