--------------------------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. Luogu 2470 [SCOI2007]压缩
  2. 201-3-19李宏毅机器学习视频笔记七(游戏解释Gradient Descent)
  3. HDU2544最短路---(Dijkstra)
  4. servlrt程序的入口点是_小程序深度报告:全网数量约550万,日活跃超4.4亿
  5. 复现经典:《统计学习方法》第 4 章 朴素贝叶斯
  6. 不等双十一,ChemDraw降价活动已经打开!
  7. 适用于单片机的数据加密算法:xxtea
  8. [XSY]Tree Ext(矩阵树定理,拉格朗日插值,最小生成树,二分)
  9. linux命令行sip电话,基于Linux和MiniGUI的SIP电话终端设计
  10. 尊贵的iPhone 11用户们,苹果喊你们换显示屏模块了……
  11. C#获取堆栈信息,输出文件名、行号、函数名、列号等
  12. firefly的使用
  13. 泛型指针,原生指针和智能指针
  14. NOR Flash与NAND Flash区别
  15. DJ4 组合逻辑电路与138译码器
  16. 01 社会网络分析基础理论!
  17. mysql中with...as用法
  18. 德育知识元素挖掘系统设计 软件工程 spring boot + Vue.js + python机器学习
  19. BTC的历史背景及历程
  20. 【转】在网页中嵌入QQ 阿里旺旺 淘宝代码及详解

热门文章

  1. turtle风轮绘制
  2. G-WAN http server
  3. 2022-2028年全球糖酶行业收入年复合增长率CAGR为 4.6%
  4. 玩转MySQL:你懂什么是事务机制原理吗
  5. 陌陌运维主管:我们是如何搞定600+设备的初创公司办公室网络环境的 | 36氪
  6. 电脑屏幕出现仅计算机,电脑开机只显示桌面?
  7. 1325: 深入浅出学算法020-阶乘和(sum)
  8. 简单易行的matplotlib中英文混排(设置中文为宋体,英文为times new roman)
  9. 星淘惠:跨境电商产业实现数字化转型促进经济发展
  10. 解决MFC 的 CButton改变样式问题,使用重绘方式。(转载)