Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книга1(полный конспект).docx
Скачиваний:
57
Добавлен:
23.12.2018
Размер:
49.16 Mб
Скачать

Область данных

Графическое изображение отображается в области данных построчно. Между строками не должно быть разрывов. При необходимости доска дополняется нулевыми значениями справа до длины, кратной 32 битам. Кодировка изображения начинается с левого нижнего угла.

При необходимости данные могут хранится в сжатом виде.

8-битовое RLE сжатие

1 способ. Длинные последовательности одинаковых битов представляются в виде записей каждая длиной 2 байта (рис. 10.18).

Рис. 10.18.

В счетчике (первый байт) указывается число повторений цвета, код которого записан во второй байт. Например, запись 03 08 означает трехкратное повторение цвета 08:080808. Счетчик может принимать значения от 0 до 255.

2 способ. Этот способ указывается нулевыми значениями первого байта. Во втором байте записано число в интервале [0; FFH], указывающей число байтов данных. Каждый такой байт содержит номер цвета, использованного для изображения определенной точки. Например 00 030F12E3 означает, что изображение состоит из трех подряд расположенных точек, цвета которых равны соответственно: OF12E3.

В том случае если во втором способе второй байт равен целой величине с интервала [0; 2], то запись интерпретируется как ESCAPE – запись, с помощью которой отмечается конец строки или битовой карты, а также сдвиг последующей точки изображения относительно текущей (табл.10.6).

Таблица 10.6.Кодирование ESCAPE – записи

Содержимое счетчика

Значения

0

Конец строки

1

Конец битовой карты

2

DeltaRecord – сдвиг последующей точки изображения относительно текущей.

Поле DeltaRecord состоит из 4 байтов следующей структуры 00 02.XX YY

XX означает смещение в пикселах по горизонтали, а YY смещение по вертикали. Например, запись 02 55 0611 0003 01 05А7 0002 06 08 интерпретируется так

55 55

11 11 11 11 11 11

01 05A7

Сдвиг на 6 пикселов по оси X и на 8 пикселов вдоль оси Y.

4-битовое RLE – сжатие

Настоящее кодирование абсолютно такое же, что и 8-битовое RLE – кодирование. Если значение первого байта лежит в интервале [0,255], то первый байт содержит число повторений информации, содержащейся во втором байте. При этом вначале считываются те же старшие четыре бита и т.д., до достижения числа точек, указанного в счетчике повторений. Например, запись 04 8F будет интерпретироована так: 8F 8F, а запись 03FF так: FFF.

Если первый байт равен 00, то при значении второго байта от 0 до 0FFH он интепретируется как счетчик. В n последующих байтах будет храниться информация о 2n точках графического изображения. Последовательность байтов должна заканчиваться на границе слова. Если второй байт равен 0, 1, 2, то как и в случае 8-битового RLE – кодирование он определяет ESCAPE – последовательность.

На рис. 10.19 представлен фрагмент дампа ВМР – файла.

Рис.10.19

Здесь, согласно кодовой таблице 6.8, коды 42 и 4D – метка файла BM, число 22С37D00 -длина файла в байтах и т.д. в соответствии с описанием.