VGA-палитра
VGA-палитра - понятие, тесно связанное со стандартом VGA и представлением этим стандартом отображаемых цветов. Из спецификации VGA следует, что поддерживающие его устройства могут отображать до 256 индексированных цветов из доступных 218 = 262 144 цветов. Почему 218? Дело в том, что для глубины цвета RGB в VGA стандартом отводится 6 бит. Так как каналов цвета у нас три (красный, зелёный, синий), то для определения полного цвета нам нужно 18 бит. Но так как во времена разработки стандарта понятия "видеопамять" не существовало (кадровый буфер размещался в ОЗУ), то эту самую память следовало экономить. Поэтому в VGA используется понятие палитра, которое позволяет снизить потребление памяти в 2,25 раза по сравнению с "чистым" 18-битным представлением.
Поскольку игры могут отображать только 256 цветов, палитра может не хранится в самих растровых изображениях, а где-то отдельно. Классические VGA-палитры имеют фиксированный размер в 768 байт (3 байта на RGB * 256), так что если после распаковки ресурса вы найдете файлы с таким размером, то на 80 % это - VGA-палитры. Обычно первый цвет в палитре - черный, так что первое значение обычно будет 00 00 00 (тоже неплохой способ детектировать палитры). Некоторые графические форматы файлов содержат уже в себе используемую палитру, например, в PCX-файлах она может находиться в последних 768 байтах.
Палитра хранится в трехбайтной упаковке по шесть бит на цветовой канал (значения от 0 до 63), иначе говоря, глубина цвета такой палитры - 18 бит. Чтобы представить ее в современной 24-битной глубине (по восемь бит на цветовой канал), нужно провести несложные вычисления с каждым цветовым каналом по следующей формуле:
цветовой_канал_8_бит = (цветовой_канал_6_бит << 2) | (цветовой_канал_6_бит >> 4)
Обратное преобразование следующее:
цветовой_канал_6_бит = цветовой_канал_8_бит >> 2