?? bmp.h
字號:
//1、位圖中頭的信息是按小字節(jié)序存儲的,注意編譯器如果是大字節(jié)序的需要字節(jié)順序調(diào)整才可以。
//2、位圖中圖象信息的第一個像素在圖象中是左下角的像素,先最下一行從左往右,然后上面一行
//3、文檔中有這樣的說法:像素數(shù)據(jù)的長度(按字節(jié)計)要是4的倍數(shù),這個4的倍數(shù)是怎么體現(xiàn)的呢?
// 首先,這個規(guī)定并不是可遵守不可遵守的,一旦不遵守,圖象水平方向上像素數(shù)是4的倍數(shù)還好,不然肯定會出錯。
// 這個4的倍數(shù)該怎么理解呢?我的像素怎么排?是不是每個像素占4個字節(jié)?
// 經(jīng)過實際用畫圖板制作各種尺寸的圖象得到下面的結(jié)論:
// 每個像素只占3個字節(jié),水平方向上所有像素連續(xù)排列,
//統(tǒng)計水平方向像素所占的字節(jié)數(shù)(像素數(shù)*3),如果得到的結(jié)果是4的倍數(shù),就繼續(xù)下一行數(shù)據(jù),
// 如果不是4的倍數(shù),在最后一個像素數(shù)據(jù)后面補0,使這一行的總字節(jié)數(shù)等于4的倍數(shù),然后開始下一行數(shù)據(jù)
// 如:
// 3*5的圖象:
// 水平方向有3個像素,像素占的字節(jié)數(shù)為9,不是4的倍數(shù),在第三個像素數(shù)據(jù)后面補3個0,使這一行的總字節(jié)數(shù)為12,補完0,開始下一行數(shù)據(jù)。
// 5*3的圖象:
// 水平方向有5個像素,像素占的字節(jié)數(shù)為15,不是4的倍數(shù),在第五個像素后面補1個0,使此行的總字節(jié)數(shù)為16,繼續(xù)下一行數(shù)據(jù)
//bmp文件頭(bmp file header):提供文件的格式、大小等信息
//1\位圖信息頭(bitmap information):提供圖像數(shù)據(jù)的尺寸、位平面數(shù)、壓縮方式、顏色索引等信息
//2\調(diào)色板(color palette):可選,如使用索引來表示圖像,調(diào)色板就是索引與其對應的顏色的映射表
// 調(diào)色板其實是一張映射表,標識顏色索引號與其代表的顏色的對應關系。
// 它在文件中的布局就像一個二維數(shù)組palette[N][4],其中N表示總的顏色索引數(shù),
// 每行的四個元素分別表示該索引對應的B、G、R和Alpha的值,每個分量占一個字節(jié)。
// 如不設透明通道時,Alpha為0。因為前面知道,本圖有256個顏色索引,因此N = 256。
// 索引號就是所在行的行號,對應的顏色就是所在行的四個元素。
//3\位圖數(shù)據(jù)(bitmap data):就是圖像數(shù)據(jù)啦^_^
#ifndef __BMP_H__
#define __BMP_H__
#include "def.h"
typedef struct
{
//BMP位圖文件頭
INT16U bfType; //Offset:0x0000,文件標志.只對'BM',用來識別BMP位圖類型
INT32U bfSize; //Offset:0x0002,文件大小,占四個字節(jié);注意是大字節(jié)序還是小字節(jié)序,實際BMP格式中是小字節(jié)序
INT16U bfReserved1; //Offset:0x0006,保留
INT16U bfReserved2; //Offset:0x0008,保留
INT32U bfOffBits; //Offset:0x000A,從文件開始到位圖數(shù)據(jù)(bitmap data)開始之間的的偏移量,看后面的圖象信息頭的多少定,圖象信息頭大小為0x28則本字段值為0x36,本字段的值實際上為"圖象信息頭長度+14+調(diào)色板信息長度"
//BMP位圖信息頭
INT32U biSize; //Offset:0x000E,位圖信息頭字節(jié)數(shù)量。一般為0x28,最好取其實際值
INT32S biWidth; //Offset:0x0012,說明圖象的寬度,以象素為單位
INT32S biHeight; //Offset:0x0016,說明圖象的高度,以象素為單位,如果這是一個正數(shù),說明圖像數(shù)據(jù)是從圖像左下角到右上角排列的。
INT16U biPlanes; //Offset:0x001A,為目標設備說明位面數(shù),其值將總是被設為1
INT16U biBitCount; //Offset:0x001C,說明比特數(shù)/象素,其值為1、4、8、16、24、或32
INT32U biCompression; //Offset:0x001E,說明圖象數(shù)據(jù)壓縮的類型。其值可以是下述值之一:
//BI_RGB:沒有壓縮;
//BI_RLE8:每個象素8比特的RLE壓縮編碼,壓縮格式由2字節(jié)組成(重復象素計數(shù)和顏色索引);
//BI_RLE4:每個象素4比特的RLE壓縮編碼,壓縮格式由2字節(jié)組成
//BI_BITFIELDS:每個象素的比特由指定的掩碼決定。
INT32U biSizeImage; //Offset:0x0022,說明圖象的大小,以字節(jié)為單位。當用BI_RGB格式時,可設置為0
INT32U biXPelsPerMeter;//Offset:0x0026,說明水平分辨率,用象素/米表示,有符號整數(shù)
INT32U biYPelsPerMeter;//Offset:0x002A,說明垂直分辨率,用象素/米表示,有符號整數(shù)
INT32U biClrUsed; //Offset:0x002E,說明位圖實際使用的彩色表中的顏色索引數(shù)
INT32U biClrImportant; //Offset:0x0032,說明對圖象顯示有重要影響的顏色索引的數(shù)目,如果是0,表示都重要。
}BMP_FILEHEADER;
//從SD卡獲取bmp文件,并顯示
bool GUI_BMP_Draw_From_SD(char *file,int x0,int y0);
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -