Заголовок файла для Windows
Первые точечные рисунки хранились в аппаратно-зависимом формате DDB (Device Dependent Bitmap). Такое представление было крайне неудобным, и разработчики Windows 3.0 отказались от него. Для нас оно не представляет интереса, поскольку не предназначено для современных видеосистем.
Семейства Windows 3-Х, 9Х и 2000 используют аппаратно-независимый формат DIB (Device independent Bitmap), заимствованный из OS/2 с некоторыми изменениями. Структура заголовка показана в табл. А.1.
Таблица А.1. Заголовок дар-файла для Windows.
Смещение поля | Размер в байтах | Имя поля | Назначение поля |
---|---|---|---|
00 (ООН) | 2 | bfType | Метка "ВМ" |
02 (02h) | 4 | bfSize | Размер файла в байтах |
06 (06h) | 2 | Reserved | Резервное поле |
08 (08h) | 2 | Reserved | Резервное поле |
10(OAh) | 4 | BfOffBits | Смещение области данных |
14(OEh) | 4 | BiSize | Размер области информации |
18(12h) | 4 | BiWidth | Ширина рисунка в точках |
22(16h) | 4 | BiHeight | Высота рисунка в точках |
26(1Ah) | 2 | Biplanes | Количество плоскостей (всегда 1) |
28(1Ch) | 2 | BiBitCnt | Количество бит на точку |
30(1 Eh) | 4 | BiCompr | Тип сжатия данных |
34 (22h) | 4 | BiSizelmage | Размер данных в байтах |
38 (26h) | 4 | biXPels/M | Количество точек на метр по оси |
42 (2Ah) | 4 | biYPels/M | Количество точек на метр по оси |
46 (2Eh) | 4 | BiClrUsed | Количество используемых цветов |
50 (32h) | 4 | BiClrlmprt | Количество цветов в палитре |
Назначение, содержание и применение основных полей заголовка будет описано в следующих подразделах, здесь мы опишем только три поля, обычно не используемые при выводе изображения на экран.
Поле biplanes указывает количество плоскостей в рисунке. Трудно сказать, какой целью его ввели. По крайней мере, при выводе рисунка на экран или на печать поле biplanes не используется.
Большинство рисунков получается путем оцифровки рукотворных картинок, фотографий, слайдов, кино или видеокадров. При выводе таких рисунков на печать важно знать размер оригинала. Необходимые для этого данные находятся в полях biXPels/M и biYPels/M, где Pels означает Picture Elements (элемент рисунка или просто точка). Если содержащиеся в них величины умножить на 25.4 и разделить на 1000, то получится разрешающая способность устройства, с помощью которого была оцифрована картинка.
Например, при сканировании с разрешением 300 точек на дюйм по обеим координатам на один метр приходится приблизительно 300-1000/25.4 =11811 точек. Этому числу соответствует код 2Е23h, который и будет храниться в описываемых полях. Учитывая возможные ошибки вычислений, реальная величина может незначительно отличаться от вычисленной.