Ф а р м а т м а л ю н к а B M PАрыгінал даступны на сайце Paul Bourke
Загаловак
Загаловак складаецца з наступных палёў. Звярніце ўвагу, што мы мяркуем, што кароткі int складае 2 байта, int 4 байта, і доўгі int 8 байт. Далей мы мяркуем, што парадак байтаў як для тыповых (Intel) машын. Даўжыня загалоўка складае 14 байт.
typedef struct {
unsigned short int type; /* Magic identifier */
unsigned int size; /* File size in bytes */
unsigned short int reserved1, reserved2;
unsigned int offset; /* Offset to image data, bytes */
} HEADER;
Карыснымі палямі ў гэтай структуры з’яўляюцца тып поля (павінна быць “BM”), якое з’яўляецца простай праверкай таго, што гэта, верагодна, будзе законным BMP-файлам, , і поле зрушэння, якое дае колькасць байт да атрымання
Даныя інфармацыі пра выявы, якія вынікаюць далей, складаюць 40 байт у даўжыню, гэта апісана ў структуры, прыведзенай ніжэй.Поля, якія прадстаўляюць найбольшую цікавасць, прадстаўленыя шырынёй і вышынёй малюнка, колькасцю біт на піксель (павінна быць 1, 4, 8 ці 24), лікам плоскасцяў (тут мяркуецца 1) і тыпам сціску (мяркуецца, што тут 0).
typedef struct {
unsigned int size; /* Header size in bytes */
int width,height; /* Width and height of image */
unsigned short int planes; /* Number of colour planes */
unsigned short int bits; /* Bits per pixel */
unsigned int compression; /* Compression type */
unsigned int imagesize; /* Image size in bytes */
int xresolution,yresolution; /* Pixels per meter */
unsigned int ncolours; /* Number of colours */
unsigned int importantcolours; /* Important colours */
} INFOHEADER;
Ніжэй прыведзены тыпы сціску, якія падтрымліваюцца BMP:
24-бітныя даныя выявы Самыя простыя дадзеныя для чытання – гэта 24-бітныя сапраўдныя каляровыя выявы. У гэтым выпадку даныя выявы вынікаюць адразу пасля загалоўка інфармацыі, гэта значыць няма каляровай палітры. Ён складаецца з трох байт на піксель у парадку b, g, r. Кожны байт дае насычанасць для гэтага каляровага кампанента, 0 для чорнага і 1 для белага (цалкам насычанага). Індэксаваныя даныя пра колерКалі малюнак індэксуецца колерам, то адразу пасля загалоўка інфармацыі з’явіцца табліца з колерамі infoheader.ncolours, кожны па 4 байта. Першыя тры байта адпавядаюць кампанентам b, g, r, апошні байт зарэзерваваны / нявыкарыстаны, але, відавочна, можа прадстаўляць альфа-канал. Для 8-бітных малюнкаў шэрага колеру гэты каляровы індэкс, як правіла, будзе проста рампам шэрага адцення. Калі вы робіце сумы …. тады даўжыня загалоўка плюс даўжыня інфармацыйнага блока плюс 4 разы колькасці колераў палітры, якое павінна адпавядаць зрушэнню дадзеных малюнка. Іншымі словамі Зыходны код
Вось крыніца, прадстаўленая Michael Sweet, BITMAP.H, BITMAP.C, і BMPVIEW.C. І некаторыя прыклады майго кода, parse.c і на прыклад 24-бітны rgb BMP файл для тэставання. Звярніце ўвагу, што ні адзін з гэтых сегментаў кода не будзе апрацоўваць усе тыпы файлаў BMP, у прыватнасці, яны не апрацоўваюць сціснутыя файлы BMP. Яны павінны стаць добрай адпраўной кропкай для сустрэтых варыянтаў і для тых, хто хоча пісаць файлы, сумяшчальныя з BMP. З іншага боку, калі ў вас ёсць ці напісаны лепшы апрацоўшчык BMP, то вы можаце падаць тут заяўку для яго дадання.
Уклад Адама Маеўскага, які запісвае па адным біце ў піксельным файле BMP:
pf1bit_bmp.c.
|