Какво е BMP файл?
Файловете с разширение .BMP представляват файлове с растерни изображения, които се използват за съхраняване на цифрови растерни изображения. Тези изображения са независими от графичния адаптер и също се наричат файлов формат на растерно изображение, независимо от устройството (DIB). Тази независимост служи за отваряне на файла на множество платформи като Microsoft Windows и Mac. Файловият формат BMP може да съхранява данни като двуизмерни цифрови изображения както в монохромен, така и в цветен формат с различни дълбочини на цвета.
Спецификации на BMP файлов формат
Независимите от устройството растерни изображения действат като помощно средство за обмен на растерни изображения между устройства и приложения. Поради непрекъснатото развитие на този файлов формат, информацията, съдържаща се в заглавките, може да е различна според версията на Bitmap. Един файл с растерно изображение се състои от структури с фиксиран и променлив размер в определена последователност.
Структурите в Bitmap файл са подредени в следния ред:
Структура | По избор | Размер | Цел |
---|---|---|---|
Заглавие на файла | Не | 14 | За съхраняване на обща информация за файла с растерно изображение |
DIB Header | No | Fixed-Size | За съхраняване на подробна информация за растерното изображение и дефиниране на пикселния формат |
Допълнителни битови маски | Да | 12 или 16 байта | За определяне на пикселния формат |
Цветова палитра | Полу-по избор | Променлив размер | За дефиниране на цветовете, използвани от данните за растерно изображение |
Gap1 | Да | Променлив размер | Подравняване на структурата |
Масив от пиксели | Не | Променлив размер | Форматът на пикселите се определя от DIB заглавката или допълнителните битови маски. |
Gap2 | Да | Променлив размер | Подравняване на структурата |
ICC цветен профил | Да | Променлив размер | За дефиниране на цветовия профил за управление на цветовете |
Когато растерно изображение се зареди в паметта, то става DIB структура, използвана от Windows чрез неговия GDI API. Заглавката на файла не е част от тази структура от данни. Цветът може също така да се състои от 16-битови записи, които съставляват индекси към текущо реферираната палитра вместо изрични RGB цветови дефиниции. Нека да разгледаме някои от тях в детайли, особено заглавките.
Заглавка на растерния файл
Заглавката на растерния файл е подобна на други заглавки на файла, използвани за идентифициране на файла. Тъй като има различни варианти на BMP файловия формат, първите 2 байта от BMP файловия формат са символ “B” и след това знак “M” в ASCII кодиране. Всички целочислени стойности се съхраняват във формат little-endian.
Офсет шестнадесетичен | Офсет намален | Размер | Цел |
---|---|---|---|
00 | 0 | 2 байта | Заглавното поле, използвано за идентифициране на BMP и DIB файла, е 0x42 0x4D в шестнадесетичен, същото като BM в ASCII. Може да следва възможните стойности.* BM – Windows 3.1x, 95, NT, … и т.н. * BA – OS/2 struct bitmap array * CI – OS/2 struct цветна икона * CP – OS/2 const цветен указател * IC – OS/2 struct икона * PT – OS/2 указател |
02 | 2 | 4 байта | Размерът на BMP файла в байтове |
06 | 6 | 2 байта | Запазено; действителната стойност зависи от приложението, което създава изображението |
08 | 8 | 2 байта | Запазено; действителната стойност зависи от приложението, което създава изображението |
0A | 10 | 4 байта | Отместването, т.е. началният адрес, на байта, където могат да бъдат намерени данните за растерно изображение (масив от пиксели). |
DIB заглавка (заглавка на растерна информация)
Подробната информация за изображението е представена от тази заглавка. Въз основа на тази информация ще бъде определено приложение, което ще се използва за показване на изображението на екрана. Всички такива заглавки съдържат DWORD (32-битово) поле, указващо техния размер, така че приложението може лесно да определи заглавката, използвана в изображението. Това основно се дължи на факта, че форматът DIB претърпя няколко разширения. Следва заглавката на DIB с изброени полета.
Цветова палитра
Цветовата палитра BMP е масив от структури, които определят стойностите на RGB интензитета на всеки цвят в цветовата палитра на дисплейното устройство. Всеки пиксел в растерните данни съхранява една стойност, използвана като индекс в цветовата палитра. Информацията за цвета, съхранена в елемента при този индекс, определя цвета на този пиксел. Наличието на цвят във файл с растерно изображение варира както следва:
- Едно, 4 и 8-битови - очаква се винаги да съдържа цветова палитра
- Шестнадесет, 24 и 32-битови - никога не съдържат цветови палитри
- Шестнадесет и 32-битови BMP файлове - съдържат стойности на маска на bitfields вместо цветовата палитра
Pixel Storage
Растерните пиксели се съхраняват като битове, опаковани в редове, където размерът на всеки ред се закръгля до кратно на 4 байта (32-битов DWORD) чрез подпълване. Общото количество байтове, необходими за съхраняване на пикселите на изображението, не може да се изчисли директно чрез просто преброяване на битовете. Тъй като има включени подложки, е необходим ефектът от закръгляване на размера на всеки ред до кратно на 4 байта. Байтовете за допълване (не непременно 0) трябва да се добавят към края на редовете, за да се увеличи дължината на редовете до кратно на четири байта. Когато масивът от пиксели се зарежда в паметта, всеки ред трябва да започва от адрес на паметта, който е кратен на 4.
Изображението всъщност се описва от 32-битовото DWORD представяне на пикселния масив. Обикновено пикселите се съхраняват “отдолу нагоре”, започвайки от долния ляв ъгъл, вървейки отляво надясно и след това ред по ред отдолу към горната част на изображението. Пикселните формати и техните последствия са изброени по-долу:
- Форматът 1 бит на пиксел (1bpp) поддържа 2 различни цвята (например: черно и бяло).
- Форматът 2 бита на пиксел (2bpp) поддържа 4 различни цвята и съхранява 4 пиксела на 1 байт, като най-левият пиксел е в двата най-значими бита. Всяка стойност на пиксел е 2-битов индекс в таблица с до 4 цвята.
- Форматът 4 бита на пиксел (4bpp) поддържа 16 различни цвята и съхранява 2 пиксела на 1 байт, като най-левият пиксел е в по-значимия нибл. Всяка стойност на пиксел е 4-битов индекс в таблица с до 16 цвята.
- Форматът 8 бита на пиксел (8bpp) поддържа 256 различни цвята и съхранява 1 пиксел на 1 байт. Всеки байт е индекс в таблица с до 256 цвята.
- Форматът 16 бита на пиксел (16 bpp) поддържа 65536 различни цвята и съхранява 1 пиксел на 2-байтова ДУМА. Всяка ДУМА може да дефинира алфа, червените, зелените и сините проби на пиксела.
- 24-битовият пикселен (24bpp) формат поддържа 16 777 216 различни цвята и съхранява 1 пикселна стойност на 3 байта. Всяка стойност на пиксел определя червените, зелените и сините проби на пиксела (8.8.8.0.0 в нотация RGBAX). По-конкретно в реда: синьо, зелено и червено (8 бита за всяка проба).
- Форматът 32 бита на пиксел (32 bpp) поддържа 4 294 967 296 различни цвята и съхранява 1 пиксел на 4-байтов DWORD. Всеки DWORD може да дефинира алфа, червените, зелените и сините проби на пиксела.