Лабораторна робота 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.