Сохранение точечного рисунка

Точечные рисунки должны сохраняться в файле, который использует установленный формат файла точечной графики и присвоенное имя с тремя символами расширения .bmp. Установленный формат файла точечной графики состоит из структуры BITMAPFILEHEADER, сопровождаемой структурой BITMAPINFOHEADER, BITMAPV4HEADER или  BITMAPV5HEADER. Массив структур RGBQUAD (также называемый таблицей цветов) следует за растровой информационной заголовочной структурой. За таблицей цветов следует второй массив индексов в таблице цветов (фактические  данные точечного рисунка.

Формат файла точечной графики показывается на нижеследующей иллюстрации.

Структуры и массивы необходимые для представления формата растрового файла

Windows 95, Windows NT 4.0: Замените структуру BITMAPINFOHEADER на структуру BITMAPV4HEADER.

Windows 98/Me, Windows 2000/XP: Замените структуру BITMAPINFOHEADER на структуру BITMAPV5HEADER.

Члены структуры BITMAPFILEHEADER идентифицируют файл; задают размер файла, в байтах; и устанавливают смещение от первого байта в заголовке до первого байта данных точечного рисунка. Члены структуры BITMAPINFOHEADER, BITMAPV4HEADER или  BITMAPV5HEADER определяют ширину и высоту точечного рисунка, в пикселях; цветовой формат ( число цветовых плоскостей и  битов цвета на пиксель) устройства отображения, на котором создавался точечный рисунок; были ли данные точечного рисунка сжаты перед сохранением и использованный тип сжатия ; число байтов данных точечного рисунка; разрешающая способность устройства отображения, на котором создавался точечный рисунок; и число цветов, представленных в данных. Структуры RGBQUAD устанавливают RGB значения интенсивности для каждого из цветов в палитре устройства.

Массив индексов цвета связывает цвет, в форме индексов в структуре RGBQUAD с каждым  пикселем в точечном рисунке. В соответствии с этим, число битов в массиве индексов цвета равняется числу пикселей, которое соответствует числу битов необходимых для индексирования структуры RGBQUAD. Например, 8x8 черно-белый точечный рисунок имеет массив индексов цвета 8 * 8 * 1 = 64 бита, потому что один бит необходим, чтобы индексировать два цвета. Рисунок Redbrick.bmp, упомянутый в статье О точечных рисунках, является 32x32 точечным рисунком с 16 цветами; его массив индексов цвета - 32 * 32 * 4 = 4096 битов потому что четыре бита индексируют  16 цветов.

Чтобы создать массив индексов цвета для нисходящего точечного рисунка, начните с верхней строки в точечном рисунке. Индекс RGBQUAD для цвета крайнего левого пикселя - первые n битов в массиве индексов цвета (где n - число битов, которое необходимо, чтобы обозначить все структуры RGBQUAD). Цвет следующего пикселя справа - следующие n битов в массиве, и т.д. После того, как Вы достигните крайнего справа пикселя в строке, продолжаете с крайнего левого пикселя в строке ниже. Продолжайте до тех пор, пока не закончите полностью обрабатывать точечный рисунок. Если это - идущий снизу вверх точечный рисунок, начните с нижней строки точечного рисунка вместо верхней строки, все также обрабатывая слева направо и продолжайте до верхней строки точечного рисунка.

Ниже показан шестнадцатеричный вывод данных, которые содержит файл Redbrick.bmp.

0000        42 4d 76 02 00 00 00 00  00 00 76 00 00 00 28 00 
0010    00 00 20 00 00 00 20 00  00 00 01 00 04 00 00 00 
0020    00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
0030    00 00 00 00 00 00 00 00  00 00 00 00 80 00 00 80 
0040    00 00 00 80 80 00 80 00  00 00 80 00 80 00 80 80 
0050    00 00 80 80 80 00 c0 c0  c0 00 00 00 ff 00 00 ff 
0060    00 00 00 ff ff 00 ff 00  00 00 ff 00 ff 00 ff ff 
0070    00 00 ff ff ff 00 00 00  00 00 00 00 00 00 00 00 
0080    00 00 00 00 00 00 00 00  00 00 00 00 00 00 09 00 
0090    00 00 00 00 00 00 11 11  01 19 11 01 10 10 09 09 
00a0    01 09 11 11 01 90 11 01  19 09 09 91 11 10 09 11 
00b0    09 11 19 10 90 11 19 01  19 19 10 10 11 10 09 01 
00c0    91 10 91 09 10 10 90 99  11 11 11 11 19 00 09 01 
00d0    91 01 01 19 00 99 11 10  11 91 99 11 09 90 09 91 
00e0    01 11 11 11 91 10 09 19  01 00 11 90 91 10 09 01 
00f0    11 99 10 01 11 11 91 11  11 19 10 11 99 10 09 10 
0100    01 11 11 11 19 10 11 09  09 10 19 10 10 10 09 01 
0110    11 19 00 01 10 19 10 11  11 01 99 01 11 90 09 19 
0120    11 91 11 91 01 11 19 10  99 00 01 19 09 10 09 19 
0130    10 91 11 01 11 11 91 01  91 19 11 00 99 90 09 01 
0140    01 99 19 01 91 10 19 91  91 09 11 99 11 10 09 91 
0150    11 10 11 91 99 10 90 11  01 11 11 19 11 90 09 11 
0160    00 19 10 11 01 11 99 99  99 99 99 99 99 99 09 99 
0170    99 99 99 99 99 99 00 00  00 00 00 00 00 00 00 00 
0180    00 00 00 00 00 00 90 00  00 00 00 00 00 00 00 00 
0190    00 00 00 00 00 00 99 11  11 11 19 10 19 19 11 09 
01a0    10 90 91 90 91 00 91 19  19 09 01 10 09 01 11 11 
01b0    91 11 11 11 10 00 91 11  01 19 10 11 10 01 01 11 
01c0    90 11 11 11 91 00 99 09  19 10 11 90 09 90 91 01 
01d0    19 09 91 11 01 00 90 10  19 11 00 11 11 00 10 11 
01e0    01 10 11 19 11 00 90 19  10 91 01 90 19 99 00 11 
01f0    91 01 11 01 91 00 99 09  09 01 10 11 91 01 10 91 
0200    99 11 10 90 91 00 91 11  00 10 11 01 10 19 19 09 
0210    10 00 99 01 01 00 91 01  19 91 19 91 11 09 10 11 
0220    00 91 00 10 90 00 99 01  11 10 09 10 10 19 09 01 
0230    91 90 11 09 11 00 90 99  11 11 11 90 19 01 19 01 
0240    91 01 01 19 09 00 91 10  11 91 99 09 09 90 11 91 
0250    01 19 11 11 91 00 91 19  01 00 11 00 91 10 11 01 
0260    11 11 10 01 11 00 99 99  99 99 99 99 99 99 99 99 
0270    99 99 99 99 99 90
 

Таблица ниже  показывает байты данных, связанные со структурами в файле точечной графики.

Структура Байты соответствия
BITMAPFILEHEADER
0x00 – 0x0D
BITMAPINFOHEADER
0x0E – 0x35
Массив RGBQUAD 
0x36 – 0x75
Массив индексов цвета
0x76 – 0x275


Назад в оглавление темы
На главную страницу темы

Hosted by uCoz