--------------------------12月2日--------------------------------------------------------------------------------------------

今天我将继续复习bmp文件相关的东西/基础知识与实际应用/了解其底层原理/理清一些写的时候的易错事项

_____________________________________________________________________________

let's go!

一 一些基础性的东西-----看一段程序----你就懂了!

#include<iostream>
#include<fstream>//包含头文件
using namespace std;
# pragma pack(1);//使得所有属性的首地址都是1的倍数即可,防止编译器“善意”添补
struct BMPFileHeader{char id[2];//B,M int size;//文件长度 short save1;//保留字段,四字节 short save2;int offset;//像素偏移
};//此结构体与下一结构体都是一个bmp文件的最基本的东西,有了它们才能被识别为bmp文件
# pragma pack(1);
struct BMPInfoHeader{int headsize;//信息头长度 int wid;//x int hei;//y short image_pile;//图层,没有用 short pixel_position;//每像素位 --24 代表每个颜色用3个字节表示,对应到下面//也就是三个 unsigned char int nothing;//压缩算法 int pixel_byte;int x_fbl;int y_fbl;int board_colour;int printer;
};
struct pixel{unsigned char b,g,r;
};//rgb 每个像素的色彩由这三个东西共同构成
pixel content[300][400];//这个是由实际需求决定的  用二维数组的方式更方便读入每个像素的数据
int main () {ofstream cell;cell.open("cell_exist_light.bmp",ios::binary);BMPFileHeader bfh={{'B','M'},400*300*3+0x36,0,0,0x36};BMPInfoHeader bih={0x28,400,300,1,24,0,400*300*3,0};cell.write((char*)&bfh,14);cell.write((char*)&bih,40);//指针强转for(int y=299;y>=0;y--){for(int x=0;x<400;x++){content[y][x].b=255;content[y][x].g=255;content[y][x].r=255;}}//写了一个白色背景for(int i=150,j=30;i>=65;i--,j+=2){//写循环 for(int y=i,x=j;y<i+85;y++,x+=2){content[y][x].b=0;content[y][x].g=255;content[y][x].r=255;content[y-1][x-1].b=0;content[y-1][x-1].g=255;content[y-1][x-1].r=255;content[y-1][x].b=0;content[y-1][x].g=255;content[y-1][x].r=255;content[y][x-1].b=0;content[y][x-1].g=255;content[y][x-1].r=255; }}cell.write((char*)content,sizeof(content));//把我写到数组里的那堆东西读入文//件,文件按照预定好的解释方式显示出了对应的图片cell.close();return 0;
}

二. 一些细节以及比较ex的东西(部分于上方程序中体现)

1.在读入数据时,原点在左下方,先读行后读列(只需看准数组的二维与之对应即可---也就是第一维是x,外面才是y,定好这个之后只需关注绝对位置即可)

2.计算机的ex的自动补齐机制-----有一种不好叫做计算机觉得这数不好

如果一行的像素不是四的倍数的时候,计算机会自动给你补齐为四的倍数-----------这个时候就要小心了,否则图像可能就不像你期望的那样生成了

3,还是编译器干的坏事-----------它觉得访问2,4,8的倍数的地址更快,所以在进行结构体定义的时候,这东西会给你默认填补使得

每一个  int  的 首地址都是    4   的倍数

short                        2

char                          1

double                       8                         你占多大字节,就让你的首地址是多少的倍数

怎么对付它呢?

#pragma pack(1); 解释同上

4. 大端与小端-------------多字节数据在内存中的存放顺序问题

bmp中 读取图像宽度时候从右往左读  并且注意是16进制即可

这次就写这么一点点,告一段落,之后来继续进行深入研究

大作业-点灯机器人-记录心得(2)-----基础铺垫-bmp相关相关推荐

  1. 大作业-点灯机器人-记录心得(1)-----基础铺垫-文件基础知识

    我在此次大作业的任务中负责的是绘制模块,任务是根据玩家输入的参数绘制生成对应的地图,以及每走一步生成一张新的状态图保存下来. 由于我的二位队友很早就写完了他们的部分,而我由于各方面繁多事务与学业压力迟 ...

  2. ROS机器人技术课程大作业,机器人基础实例

    一.话题与服务编程: 通过代码新生一只小海龟, 放置在(5.5,5.5)点, 命名为 "JerryXXXX": 通过代码订阅JerryXXXX的实时位置并在终端打印: 编程控制Je ...

  3. 2022春哈工大ICS大作业——程序人生-hello‘sP2P

    计算机系统(初发布于2022/5/15,修改于2022/5/20) 大作业 题     目 程序人生-Hello's P2P 专       业 学    号 班    级 学       生 沈业力 ...

  4. matlab大作业——基础模板设计

    任务描述 基础版图像处理小工具,完成图像处理的基本操作和阐述其原理. 功能模块 1.导入图片 1.1算法原理 通过uigetfile打开文件选择对话框获取图像,axes();imshow()将图像显示 ...

  5. (附完整代码和实验报告)【python 大作业】实现一个聊天机器人,关键词双重查找,结合语境查找,爬虫查询,图形化界面,语音播报。

    完整项目分享: 链接:https://pan.baidu.com/s/17GO0RoyMs2qwCoxcvFiHkg 提取码:5969 (如果这个项目帮助到你了,麻烦点个赞,谢谢) 1.实现功能: 1 ...

  6. matlab求解多自由度振动系统,【2017年整理】1-《机械振动基础》大作业,基于matlab的多自由度振动.doc...

    [2017年整理]1-<机械振动基础>大作业,基于matlab的多自由度振动 <机械振动基础>大作业 (2016年春季学期) 题目多自由度振动系统的固有频率和固有阵型 姓 名学 ...

  7. Xd设计与制作记录贴:记录我的艺术设计基础期末大作业

    Xd设计与制作记录贴:记录我的艺术设计基础期末大作业 通过艺术设计基础这门课的学习,我掌握了一些PPT的制作技巧和Xd入门操作方法. 期末大作业是要根据以前课上讨论的主题做一个能展现自己设计思路的工程 ...

  8. 2022年春季学期计算机系统大作业——程序人生心得体会

    计算机系统 大作业 题     目 程序人生-Hello's P2P 专       业 计算学部 学    号 120L021801 班    级 2003006 学       生 郑卓 指 导 ...

  9. 《 Python程序设计项目案例》— 人脸识别考勤可视化分析系统签到打卡记录到Excel表格项目参考代码(课程设计、期末结课大作业、毕业设计)

    声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/107348867 Python课程设计(程 ...

最新文章

  1. [Spring MVC] - Spring MVC环境搭建
  2. 企业网站设计方案需先明确网站主题
  3. 【Java】7.1 与用户互动 7.2 系统相关
  4. 一个跨国银行的敏捷转型案例要点之全员培训
  5. OpenHarmony和HarmonyOS有什么区别?这篇文章讲清楚了
  6. 科大星云诗社动态20210509
  7. 学Java有什么技巧和方法推荐?
  8. Python编程从入门到实践~函数
  9. 项目中有出现过缓存击穿,简单说说怎么回事?
  10. 1908元?iPhone SE 3价格大幅下调,网友:这个价格我冲了
  11. 信息安全技术--轮转机密码
  12. Ae 效果详解:CC Grid Wipe
  13. Centos 安装阿里软件安装源
  14. yolov4-论文解析(3)
  15. 爬虫实战【12】使用cookie登陆豆瓣电影以及获取单个电影的所有短评
  16. echart 折线从左到右动画效果_echarts多条折线图动态分层的实现方法
  17. redis数据类型介绍
  18. 解密:IT运维艺术之集群(4层AND7层)
  19. Python黑帽子-黑客与渗透测试编程之道
  20. 知道答案在哪里比知道答案更重要

热门文章

  1. UD LAN-401 信号处理模块
  2. Baklib知识分享|知识库对企业来说有哪些意义?
  3. 没进华为之前,你是否了解华为的职级体系呢?
  4. 整体大于部分之和(怦然心动影评)
  5. 2020cvpr最佳人脸识别-Suppressing Uncertainties for Large-Scale Facial Expression Recognition
  6. mindmanager的R6025 - pure virtual function call错误解决办法
  7. vue2入门----父传子/子传父/兄弟相传
  8. 数据结构和算法之排序总结
  9. InDesign 教程:如何创建和编辑图层?
  10. arcgis api for js 4.19 尝鲜(React + ts+ arcgis api)