Лабораторна робота 2,3
Матеріал з Вікі ЦДУ
Версія від 13:13, 19 травня 2015; Анна Каліванова (обговорення • внесок)
Растрові формати:
BMP (BitMaP) — Формат bmp (від слів BitMaP - бітова карта, або бітовий масив) представляє з себе нестиснене (в основному) зображення, яке досить легко читається і виводиться в ОС Windows, в якій є спеціальні функції API, які цього допомагають.
Види форматів BMP
biBitCount | Палітровий або безпалітровий формат | Максимально можлива кількість кольорів | Примітки |
1 | Палітровий | 2 | Двоцвітна, зауважте, не обов'язково чорно-біла, палітрова картинка. Якщо біт растра скинутий (дорівнює 0), то це означає, що на цьому місці має бути перший колір з палітри, а якщо встановлений (дорівнює 1), то другий. |
4 | Палітровий | 16 | |
8 | Палітровий | 256 | Один з найпоширеніших варіантів. Але в той же час і найпростіших. Палітра займає один кілобайт (але на це краще не розраховувати). Один байт - це один колір. Причому його значення - це номер кольору в палітрі |
16 | Безпалітровий | 2^16 або 2^15 | Це самий заплутаний варіант. Почнемо з того, що він безпалітровий, тобто кожні два байти (одне слово WORD) в растрі однозначно визначають один піксель. Але от що виходить: бітів-то 16, а компонентів квітів - 3 (Червоний, Зелений, Синій). А 16 ніяк на 3 ділитися не хоче. Тому тут є два варіанти. Перший - використовувати не 16, а 15 бітів, тоді на кожну компоненту кольору виходить по 5 біт. Таким чином ми можемо використовувати максимум 2 ^ 15 = 32768 кольорів і виходить трійка RGB = 5-5-5. Але тоді за даремно втрачається цілий біт з 16. Але так вже сталося, що наші очі серед усіх кольорів краще сприймають зелений колір, тому й вирішили це один біт віддавати на зелену компоненту, тобто тоді виходить трійка RGB = 5-6-5, і тепер ми може використовувати 2 ^ 16 = 65536 кольорів. Але що найнеприємніше, що використовують обидва варіанти. В MSDN пропонують для того, щоб розрізняти скільки ж кольорів використовується, заповнювати цим значенням поле biClrUsed зі структури BITMAPINFOHEADER. Щоб виділити кожну компоненту треба використовувати такі маски. Для формату 5-5-5: 0x001F для синьої компоненти, 0x03E0 для зеленої і 0x7C00 для червоної. Для формату 5-6-5: 0x001F - синя, 0x07E0 - зелена і 0xF800 червона компоненти відповідно |
24 | Безпалітровий | 2^24 | А це найпростіший формат. Тут 3 байти визначають 3 компоненти кольору. Тобто по компоненті на байт. Просто читаємо по структурі RGBTRIPLE і використовуємо його поля rgbtBlue, rgbtGreen, rgbtRed. Вони йдуть саме в такому порядку. |
32 | Безпалітровий | 2^32 | Тут 4 байта визначають 3 компоненти. Але, правда, один байт не використовується. Його можна віддати, наприклад, для альфа-каналу (прозорості). Читати растр в даному випадку зручно структурами RGBQUAD. |