Ⅰ BMP文件中圖像數據是按什麼順序存放的
BMP文件的數據按照從文件頭開始的先後順序分為四個部分:
◆ 點陣圖文件頭(bmp file header): 提供文件的格式、大小等信息
◆ 點陣圖信息頭(bitmap information):提供圖像數據的尺寸、位平面數、壓縮方式、顏色索引等信息
◆ 調色板(color palette):可選,如使用索引來表示圖像,調色板就是索引與其對應的顏色的映射表
◆ 點陣圖數據(bitmap data):圖像數據區
BMP文件頭結構體定義如下:
typedef struct tagBITMAPFILEHEADER
{ UINT16 bfType; //2Bytes,必須為"BM",即0x424D 才是Windows點陣圖文件
DWORD bfSize; //4Bytes,整個BMP文件的大小
UINT16 bfReserved1; //2Bytes,保留,為0
UINT16 bfReserved2; //2Bytes,保留,為0
DWORD bfOffBits; //4Bytes,文件起始位置到圖像像素數據的位元組偏移量} BITMAPFILEHEADER;
BMP信息頭結構體定義如下:
typedef struct _tagBMP_INFOHEADER
{DWORD biSize; //4Bytes,INFOHEADER結構體大小,存在其他版本I NFOHEADER,用作區分
LONG biWidth; //4Bytes,圖像寬度(以像素為單位)
LONG biHeight; //4Bytes,圖像高度,+:圖像存儲順序為Bottom2Top,-:Top2Bottom
WORD biPlanes; //2Bytes,圖像數據平面,BMP存儲RGB數據,因此總為1
WORD biBitCount; //2Bytes,圖像像素位數
DWORD biCompression; //4Bytes,0:不壓縮,1:RLE8,2:RLE4
DWORD biSizeImage; //4Bytes,4位元組對齊的圖像數據大小
LONG biXPelsPerMeter; //4 Bytes,用象素/米表示的水平解析度
LONG biYPelsPerMeter; //4 Bytes,用象素/米表示的垂直解析度
DWORD biClrUsed; //4 Bytes,實際使用的調色板索引數,0:使用所有的調色板索引
DWORD biClrImportant; //4 Bytes,重要的調色板索引數,0:所有的調色板索引都重要
}BMP_INFOHEADER;
BMP調色板結構體定義如下:
typedef struct _tagRGBQUAD
{BYTE rgbBlue; //指定藍色強度
BYTE rgbGreen; //指定綠色強度
BYTE rgbRed; //指定紅色強度
BYTE rgbReserved; //保留,設置為0} RGBQUAD;
1,4,8點陣圖像才會使用調色板數據,16,24,32點陣圖像不需要調色板數據,即調色板最多隻需要256項(索引0 - 255)。
顏色表的大小根據所使用的顏色模式而定:2色圖像為8位元組;16色圖像位64位元組;256色圖像為1024位元組。其中,每4位元組表示一種顏色,並以B(藍色)、G(綠色)、R(紅色)、alpha(32位點陣圖的透明度值,一般不需要)。即首先4位元組表示顏色號1的顏色,接下來表示顏色號2的顏色,依此類推。
顏色表中RGBQUAD結構數據的個數有biBitCount來確定,當biBitCount=1,4,8時,分別有2,16,256個表項。
當biBitCount=1時,為2色圖像,BMP點陣圖中有2個數據結構RGBQUAD,一個調色板佔用4位元組數據,所以2色圖像的調色板長度為2*4為8位元組。
當biBitCount=4時,為16色圖像,BMP點陣圖中有16個數據結構RGBQUAD,一個調色板佔用4位元組數據,所以16像的調色板長度為16*4為64位元組。
當biBitCount=8時,為256色圖像,BMP點陣圖中有256個數據結構RGBQUAD,一個調色板佔用4位元組數據,所以256色圖像的調色板長度為256*4為1024位元組。
當biBitCount=16,24或32時,沒有顏色表。
BMP圖像數據區
點陣圖數據記錄了點陣圖的每一個像素值,記錄順序是在掃描行內是從左到右,掃描行之間是從下到上。點陣圖的一個像素值所佔的位元組數:
當biBitCount=1時,8個像素佔1個位元組;
當biBitCount=4時,2個像素佔1個位元組;
當biBitCount=8時,1個像素佔1個位元組;
當biBitCount=24時,1個像素佔3個位元組;
Windows規定一個掃描行所佔的位元組數必須是4的倍數(即以long為單位),不足的以0填充,
一個掃描行所佔的位元組數計算方法:
DataSizePerLine= (biWidth* biBitCount+31)/8;
// 一個掃描行所佔的位元組數
DataSizePerLine= DataSizePerLine/4*4; // 位元組數必須是4的倍數
點陣圖數據的大小(不壓縮情況下):
DataSize= DataSizePerLine* biHeight;
顏色表接下來位為點陣圖文件的圖像數據區,在此部分記錄著每點像素對應的顏色號,其記錄方式也隨顏色模式而定,既2色圖像每點佔1位(8位為1位元組);16色圖像每點佔4位(半位元組);256色圖像每點佔8位(1位元組);真彩色圖像每點佔24位(3位元組)。所以,整個數據區的大小也會隨之變化。究其規律而言,可的出如下計算公式:圖像數據信息大小=(圖像寬度*圖像高度*記錄像素的位數)/8。
Ⅱ 數據的儲存結構主要有哪兩種有什麼主要區別
數據的儲存結構主要有:順序存儲結構和鏈式存儲結構。
主要區別
一、存儲單元的連續性不同
鏈式存儲結在構計算機中用一組任意的存儲單元存儲線性表的數據元素(這組存儲單元可以是連續的,也可以是不連續的)。
順序存儲結構在計算機中用一組地址連續的存儲單元依次存儲線性表的各個數據元素。
二、優缺點不同
空間上
順序比鏈式節約空間。是因為鏈式結構每一個節點都有一個指針存儲域。
存儲操作上:
順序支持隨機存取,方便操作
插入和刪除上:
鏈式的要比順序的方便(因為插入的話順序表也很方便,問題是順序表的插入要執行更大的空間復雜度,包括一個從表頭索引以及索引後的元素後移,而鏈表是索引後,插入就完成了)
三、適用方向不同
鏈式存儲適用於在較頻繁地插入、刪除、更新元素時,而順序存儲結構適用於頻繁查詢時使用。
Ⅲ 數據存儲單位從小到大排列順序是
數據存儲單位從小到大排列順序是PB、EB、ZB、YB。
數據存儲對象包括數據流在加工過程中產生的臨時文件或加工過程中需要查找的信息。數據以某種格式記錄在計算機內部或外部存儲介質上。數據存儲要命名,這種命名要反映信息特徵的組成含義。數據流反映了系統中流動的數據,表現出動態數據的特徵;數據存儲反映系統中靜止的數據,表現出靜態數據的特徵。