日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/1/1 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大作业-点灯机器人-记录心得(2)-----基础铺垫-bmp相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

--------------------------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相关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。