TIM 16-bit (actual colors) [TBGR / A1B5G5R5]
В самом устройстве TIM нет ничего сложного, кроме формата хранения (присвоения) палитры пикселю.
В качестве примера будем рассматривать прикрепленный файл SPIN.TIM. Это изображение размером 188x24.
Вид в Hex-редакторе.
Константа (постоянное значение), видимо для обозначения, что это формат TIM.
Первые 4 байта можно назвать константой = 0x10000000. (Дополнение от TTEMMA)
Следующие 4 байта, обозначают какого типа (формата) будут данные (будет TIM файл). В нашем случае это 16-bit (A1B5G5R5).
Следующие 4 байта = тип изображения: (Дополнение от TTEMMA)
- 0x08 = 4-bit
- 0x09 = 8-bit
- 0x02 = 16-bit
- 0x03 = 24-bit
Размер файла. Отсчёт начинает с 8h. То есть с того место, где начинается информация об изображении. Данные хранятся в перевёрнутом виде. Размер данных составляет 0x234C (отсчёт с $8 до $2353 включительно). В файле данные имеют вид 4C 23. Для нормального восприятия нужно переставить байты местами. Сделав это, мы получим 23 4C, собственно говоря, это и есть размер данных.
Ширина (длинна) изображения в пикселях по X. У нас оно составляет 188 пикселей. Что соответствует в байтах 00 BC. В файле данное значение записано как BC 00. То есть в перевёрнутом виде.
Высота изображения в пикселях по Y. У нас оно составляет 24 пикселя. Что соответствует в байтах 00 18. В файле данное значение записано как 18 00. То есть в перевёрнутом виде.
Всё остальное данные (с 14h) это пиксели идущие друг за другом.
Один пиксель состоит из двух байт.
Дальше начинается самое сложное. Данные хранятся в виде (порядке) TBGR (Transparency, Blue, Green, Red (Прозрачность, Синий, Зелёный, Красный)) / A1B5G5R5. Сначала идёт бит устанавливающий прозрачность. Затем на каждый из цветов приходится по 5 бит. Таким образом, мы имеем 15-bit RGB (R5 G5 B5).
Поскольку данные в файле хранятся в перевёрнутом виде, чтобы с ними работать их нужно перевести в нормальный вид. В файле один пиксель записан как 18 63. Меняем байты местами и получаем 63 18. С этими данными нам и предстоит работать.
Дальше нам предстоит работать с битами.
В битах данные имеют следующий вид:
0 11000 11000 11000
Теперь нужно преобразовать эту информацию в RGB.
Для лучшего восприятия 5 битам приписываем 3 нулевых бита в начало.
Было:
11000
Стало:
00011000
Теперь 8 бит, преобразовываем в цифры.
00011000 = 24
И это число нужно умножить на 8.
24 * 8 = 192
Теперь остаётся вписать данные на своё место и мы получим цвет пикселя. В данном случае это один из оттенков серого.
Прикрепленные изображения
Прикрепленные файлы
-
SPIN.7z 203байт
378 Количество загрузок: