Описание на графичните формати (BMP, TGA) - Общи - Каталог със статии - Софтуер VileDog
--> -->Формуляр за вход -->
-->Статистика -->
********** Описание на графичните формати (BMP, TGA) **********
BMP форматът е разработен за OS Windows и се използва широко в него, но е разработен като междуплатформен формат и има всички необходими атрибути за това. Заглавката на BMP файл се състои от 2 части, същинската заглавка " FILE HEADER " и информационната част " INFORMATION HEADER ". Описанието на цялата икономика е дадено по-долу:
BM подпис (2 байта) = "BM" - заглавка (BitMap) Размерът на файла (4 байта) е размерът на самия файл в байтове. Резервирано (2 байта) – запазено, трябва да бъде (0x00 0x00). Резервирано (2 байта) – запазено, трябва да бъде (0x00 0x00). Местоположение на растерните данни (4 байта) - показва къде започва самото растерно изображение спрямо началото на файла
Размер на информационния хедър (4 байта) = 40 (0x28) - размер на информационния хедър в байтове Ширина на изображението (4 байта) - ширина на изображението в пиксели Височина на изображението (4 байта) - височина на изображението в пиксели Брой цветни равнини (2 байта) - брой равнини (засега винаги = 1 (0x00 01) ). Брой битове на пиксел (2 байта) - брой битове на пиксел Използван метод на компресия (4 байта) - тип компресия ( = BI_RGB (без компресия)… Брой байтове растерни данни (4 байта) - размер на изображението в байтове (0 - ако BI_RGB) Хоризонтална разделителна способност на екрана (4 байта) - брой пиксели на метър хоризонтално (не е необходимо) на екрана) Вертикална разделителна способност на екрана (4 байта) - брой пиксели на вертикален метър (не е задължително на екрана) Брой цветове, използвани в изображението (4 байта) - 0 = максимален възможен брой цветове Брой важни цветове (4 байта) - 0 = всички цветове са важни
Искамнасочете вниманието си към следното: Брой битове на пиксел - Може да приема следните стойности: 1 (черно-бяло изображение); 4 (16 цвята); 8 (256 цвята); 24 (16,7 милиона цвята). Също така това поле определя наличието на цветна таблица (цветна таблица) и нейния външен вид. В еднобитово изображение цветната таблица съдържа 2 цвята, обикновено черно и бяло. По този начин, ако битът в данните за изображението е "0", тогава той сочи към 1-ви елемент от цветната таблица, а ако е "1", тогава към втория. В 4-битово изображение цветната таблица съдържа 16 елемента и всеки BYTE от данните за изображението представлява 2 пиксела, т.е. 4 ниски бита и 4 високи бита, които сочат към елементи в цветовата таблица. Съществува и стандартна цветова таблица за 16-цветния режим, но тя не е актуална в момента. В 8-битово изображение всеки байт представлява един пиксел и сочи към един от 256-те елемента на цветовата таблица. Цветовата таблица се състои от 256 елемента всеки цвят, които кодират 3 байта, по един за всеки от RGB компонентите на цвета. В 24-битово изображение всеки пиксел е представен от 3 байта, 1-ви за червен (R), 2-ри за зелен (G), 3-ти за син (B) цвят.
Също така имайте предвид, че ако изображението е индексирано (т.е. 1\4\8-битово), тогава данните от таблицата с цветове идват преди данните за изображението!
ПРИМЕР ЗА ЗАРЕЖДАНЕ НА .BMP:
Класът за съхранение на изображения изглежда така:
#define T_RGB 24 #define T_RGBA 32
typedef клас TextureImage < публичен: неподписан char *fileName; unsigned char *imageData; // Данни за изображение (до 32 бита на пиксел) unsigned short bpp; // Дълбочина на цвета в битове на пиксел неподписана дълга ширина; // Ширина на изображението неподписана дълга височина; // Височина на изображението unsigned int type; // Типданни в изображение (RGB/RBGA) unsigned int texID; // texID се използва за избор на текстура
bool LoadTexture(char *fName);
bool LoadTextureBMP(const char *fName); bool SaveTextureBMP(const char *fName); анулира Init(); >TextureImage;
Сега нека опишем конструктора и деструктора за нашия клас.
TextureImage() //free_memory_on_class_destruction < if(fileName) delete[] fileName; // изтриване на име на файл if(imageData) delete[] imageData; // и масив от данни >
void TextureImage::Init() // инициализация < име на файл = NULL; данни за изображение = NULL; bpp = 0; w >височина = 0; тип = T_RGBA; текс >>
bool TextureImage::LoadTextureBMP(const char *fName) < // ФАЙЛ HEADER unsigned char BMPheader[2] = ;// (2 байта) BMP файл header - 2 байта "BM" unsigned char BMPcompare[2]; // (2 байта) заглавка на BMP файл за сравнение unsigned long fSize; // (4 байта) размер на файла в байтове unsigned char reserved2[4]; // (2x2 байта) запазени (2 полета от 2 байта винаги са 0x00) неподписан дълъг dataStart; // (4 байта) показва къде започва растерното изображение спрямо началото на fl
// ИНФОРМАЦИОНЕН ХЕДЪР unsigned long infoSize; // (4 байта) размер на информационния блок (обикновено = 40 (0x28)) // unsigned int width; // (4 байта) ширина на изображението в пиксели // unsigned int height; // (4 байта) височина на изображението в пиксели unsigned short numPlanes; // (2 байта) брой цветни равнини (слоеве) // неподписан кратък bitPerPel; // (2 байта) брой битове на пиксел неподписано дълго компресиране; // (4 байта) тип компресия (BI_RGB - без компресия) unsigned long bitSize; // (4 байта) размер на изображението в байтове (0 ако BI_RGB) unsigned long hPPM; // (4 байта)брой пиксели на хоризонтален метър unsigned long vPPM; // (4 байта) брой пиксели на вертикален метър unsigned long numColors; // (4 байта) брой цветове в изображението (0 - максимално възможен) unsigned long numImpColors; // (4 байта) брой важни цветове (0 - всички цветове са важни)
// BGR към RGB размяна на R и B цветови компоненти for(unsigned int cswap = 0; cswap
Е, за тези, които се интересуват, ето кода, който записва изображението на HDD във формат .BMP. Както се оказа, това е дори по-лесно %) от изтеглянето.
bool TextureImage::SaveTextureBMP(const char *fName) < // ФАЙЛ HEADER unsigned char BMPheader[2] = ;// (2 байта) BMP файл header - 2 байта "BM" unsigned int fSize; // (4 байта) размер на файла в байтове unsigned char reserved2[4] = ; // (2x2 байта) запазени (2 полета от 2 байта винаги са 0x00) неподписан дълъг dataStart = 54; // (4 байта) показва къде започва растерното изображение спрямо началото на fl
// ИНФОРМАЦИОНЕН ХЕДЪР unsigned long infoSize = 40; // (4 байта) размер на информационния блок (обикновено = 40 (0x28)) // unsigned int width; // (4 байта) ширина на изображението в пиксели // unsigned int height; // (4 байта) височина на изображението в пиксели unsigned short numPlanes = 1; // (2 байта) брой цветни равнини (слоеве) // неподписан кратък bitPerPel; // (2 байта) брой битове на пиксел неподписано дълго компресиране = 0; // (4 байта) тип компресия (BI_RGB - без компресия) unsigned long bitSize = 0; // (4 байта) размер на изображението в байтове (0 ако BI_RGB) unsigned long hPPM = 2834; // (4 байта) брой пиксели на хоризонтален метър unsigned long vPPM = 2834; // (4 байта) брой пиксели на вертикален метър unsigned long numColors = 0; // (4 байта) брой цветове в изображението (0 - максимумвъзможно) unsigned long numImpColors = 0; // (4 байта) брой важни цветове (0 - всички цветове са важни) // 56 байта от ВСИЧКИ заглавие
int bytesPerPixel = bpp/8; fSize = ширина * височина * bytesPerPixel; ФАЙЛ *file = fopen(fName, "wb"); // Отваряне на BMP файл за запис // ЗАГЛАВКА НА ФАЙЛ if(file != NULL) // Ако файлът съществува. < // запис на ФАЙЛ HEADER fwrite(&BMPheader, 1, sizeof(BMPheader), file); fwrite(&fРазмер, 1, 4, файл); fwrite(&reserved2, 1, sizeof(reserved2), файл); fwrite(&dataStart, 1, sizeof(dataStart), файл);
// запис на данни за изображение if(imageData != NULL) fwrite(imageData, 1, fSize, file); друго < fclose(файл); връща невярно; >
fclose(файл); връща истина; > връща невярно; >
Това е всичко, което исках да ви кажа за .BMP формата. Надяваме се това да ви е от полза.
TGA (TARGA) файлов_формат
TGA заглавка на файл.
Поле1 (1_байт) Поле2 (1_байт) Поле3 (1_байт) Поле4 (5_байт) - 2+2+1 байт Поле5 (10_байт) - 2+2+2+2+1+1 Поле6 (променлива дължина) Поле7 (променлива дължина) Поле7 (променлива дължина) Поле 9 (променлива дължина)
Разширени полета версия 2.0
Поле1: „Дължина на ID“ Указва броя на байтовете, съдържащи се в Поле6.
Поле 2: Тип цветна карта Показва типа светлинна карта, ако има такава. Приема 2 стойности: 0 – няма цветова карта 1 – цветна карта присъства във файла с изображение (първите 128 вида цветни карти са запазени от Truevision, останалите 128 могат да се използват от разработчиците)
Поле3: “ Тип изображение ” Тип изображение. Приема една от 7 стойности: 0 - няма данни за изображение (Празен файл. Информацията за услугата може да бъде съхранена.) 1 - некомпресирано цветово картографиране(цветните данни на пикселите се съдържат в цветната карта) изображение. 2 – некомпресирано True-color (пълноцветно) изображение. 3 - некомпресирано черно - и - бяло (черно-бяло) изображение. 9 - Цветно картографирано изображение, компресирано от RLE алгоритъм (Run - Length Encoded). 10 – Истинско цветно (пълноцветно) изображение, компресирано от RLE (Run-Length Encoded) алгоритъм. 11 - Черно-бяло (черно-бяло) изображение, компресирано съгласно алгоритъма RLE (Run-Length Encoded). (Първите 128 типа цветни карти са запазени от Truevision, останалите 128 могат да се използват от разработчиците)
Поле4: „Спецификация на цветовата карта“ Това поле съдържа подполета, които описват цветовата карта, ако има такава.
Поле 4.1: (2 байта) „Индекс на първия запис“ Съдържа указател към първия елемент от данни в индексната таблица (цветна карта) Например: индексната таблица съдържа 1024 записа, но имате нужда само от 72 записа, това поле ви позволява да започнете от средата на индексната таблица (цветна карта).
Поле 4.2: (2 байта) „Дължина на цветната карта“ Общият брой записи, съдържащи се в цветната карта.
Поле 4.3: (1 байт) „Размер на записа на цветната карта“ Брой битове на запис. Обикновено се използват 15, 16, 24, 32 бита.
Поле 5: „Спецификация на изображението“ Това поле съдържа подполета, които описват позициите на изображението на екрана, размерите и дълбочината на цвета. Това поле винаги присъства във файла. Поле 5.1: (2 байта) „ X - произход на изображението ” X-координата на позицията на долния ляв ъгъл на изображението на екрана (използвано при оборудване като TARGA). Поле 5.2: (2 байта) „Y - произход на изображението“ Y-координата на позицията на долния ляв ъгъл на изображението на екрана (използвано на оборудване като TARGA). Поле 5.3: (2 байта) „ Ширина на изображението ” Ширина на изображението впиксели. Поле 5.4: (2 байта) „ Височина на изображението ” Височина на изображението в пиксели. Поле 5.5: (1 байт) „Дълбочина на пиксела“ Указва броя битове на пиксел. Типичните стойности са 8, 16, 24, 32 бита, но може да има и други стойности. Поле 5.6: (1 байт) „Дескриптор на изображение“ ……
Поле6: „Image ID“ Това незадължително поле съдържа идентификационна информация за изображението (255 байта максимум). Ако Field1 = 0, тогава това поле отсъства.
Поле7: „Данни за цветна карта“ Полето също не е задължително и ако Поле2 = 0, това поле също липсва.
Поле8: „Данни за изображение“ Съдържа данни за изображение. Дължината на полето е (Височина) x (Ширина). Структурата на пикселните данни зависи от типа на изображението (Поле 3).
Поле 9: „ Данни за разработчици ” Полето се използва по преценка на разработчиците