Графические устройства

         

Возможные отклонения от стандарта

По-видимому, стандарты пишут для того, чтобы их не соблюдали. Анализ большого количества файлов формата BMP приводит именно к такому печальному выводу. Потенциальные возможности для отклонений заложены в самом стандарте для Windows, который явно избыточен — многие величины можно просто вычислить исходя из значений других величин, а не выбирать их из полей заголовка. Именно так и поступают в большинстве случаев.

Наиболее пунктуально заполняют заголовок программы оцифровки изображений, например, выполняющие сканирование рисунков. Однако после оцифровки "оригинальные" файлы проходят достаточно сложный путь, связанный с различными преобразованиями. Очень часто рисунки редактируются с помощью графических редакторов, которые могут изменить заголовок файла по "своему усмотрению". Например редактор Paintbrush для Windows просто очищает в заголовке байты с 30-го по 50-й, что при этом теряется — можно увидеть в табл. АЛ. Если такой файл импортировать в CorelDraw 4.0, то рисунок окажется искаженным, но сам Paintbrush воспроизводит его нормально. Вероятно, разработчики CorelDraw не учли возможность несоответствия


заголовка файла стандарту BMP.

"Оригинал" мог быть подготовлен в одном графическом стандарте, а затем преобразован в другой, например, в стандарт BMP какой-либо программой. Такое преобразование может оказаться причиной более тонких ошибок, связанных с различием способов хранения самого рисунка. Например, по требованию стандарта PCX количество точек в строке должно быть кратно 16. Такое требование не противоречит стандарту BMP явно, но и не оговорено в нем. Если при преобразовании в BMP сохранить указанную особенность формата PCX, что обычно и делается, то рисунок будет искажен.

Стандарт для OS/2 оставляет меньше возможностей для отклонений, но одна все таки есть, — в двойном слове bfsize должен храниться размер файла. Содержимое этого слова лучше не использовать в программе. Слишком часто встречаются файлы с "потерянной" старшей частью двойного слова.

Как учесть в программе максимум возможных отклонений от стандарта? Для этого надо использовать только те величины, которые указаны в

Содержание раздела