Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экз1.docx
Скачиваний:
52
Добавлен:
23.09.2019
Размер:
231.96 Кб
Скачать

32. Материалы

Вызов Material Editor (Редактора Материалов) осуществляется через пункт падающего меню, но все же удобнее использовать функциональную кнопку в Main Toolbar (Основной Панели). Обратите внимание на ключевые моменты этого нового окна (рис. 7.01).

Основной рабочей зоной является область ячеек образцов. По умолчанию их 6. Для просмотра остальных 18-ти служит горизонтальная и вертикальная прокрутки. Каждая из ячеек содержит визуализированный образец материала, и активная ячейка имеет белую рамку по периметру. Материал может быть назначен в сцене хотя бы одному объекту, тогда уголки ячейки будут срезаны.

Причем если объект, содержащий указанный материал, выделен, то уголки будут залиты белым цветом. Если же материал не назначен ни одному объекту, то уголки ячейки прямые, без скосов (рис. 7.02 а, b, с, d).

Все остальные зоны свитков, прокруток и управляющих кнопок служат для настройки различных параметров, влияющих на финальный вид материала в сцене. Активная ячейка выбирается левым щелчком. Для изменения числа видимых ячеек материалов (или 53 = 15, или 64 = 24) нужно вызвать меню настройки правым щелчком на активной ячейке (рис. 7.03). Используя пункты этого меню, можно полностью адаптировать область ячеек материалов по своему вкусу.

33. Основные виды Effects (Специальных Эффектов)  

Описываемая группа эффектов относится к виду Специальных или Оптических. Сюда входят следующие эффекты:  

  • Lens Effects (Линзовые Эффекты) -группа фильтров, реализующая свечение, линзовые блики, линзовые кольца, звездоподобные лучи и некоторые другие.  

  • Blur (Размытие) - размытие четких границ объектов или всего кадрового изображения  

  • Brightness and Contrast (Яркость и Контрастность) - корректировка характеристик яркости и контрастности получаемого визуализацией изображения.  

  • Color Balance (Цветовой Баланс) - настройка цветовой гаммы изображения.  

  • Depth of Field (Глубина Резкости) - создание эффекта расфокусировки, имитирующей съемку реальной видеокамерой или фотоаппаратом.  

  • File Output (Файловый Вывод) - запись на диск файлов каналов дополнительной графической информации.  

  • Film Grain (Зернистость Пленки) - обработка итогового изображения визуализации сцены, имитирующие естественную зернистость пленки.  

Для выбора типа эффекта и его настройки необходимо вызвать диалоговое окно Rendering Effect (Визуализация Эффектов) пунктом Effects (Эффекты) падающего меню Rendering (Визуализация). Интерфейс свитка Effects (Эффекты) аналогичен описанному ранее свиткуAtmosphere (Атмосфера) эффектов Окружения, за исключением добавленной группы инструментов Preview (Просмотр) (рис. 10.21), которая состоит из следующих настроек:  

  • Effects (Эффекты) - этот переключатель выбирает отображение АИ (Всех) эффектов илиCurrent (Текущего) эффекта в Виртуальном Кадровом Буфере.  

  • Interactive (Отобразить Динамически) - этот флажок включает режим мгновенного обновления всех изменений. Если он выключен, то для их просмотра используется Update Effect (Обновить).  

  • Show Original / Show Effect (Показать Исходный / Показать Эффект) - эта кнопка переключает вид кадра без применения эффектов и наоборот.  

  • Update Scene (Обновить Сцену) - эта кнопка производит повторный обсчет кадра сцены, а индикаторная шкала Currently Updating (Текущее Обновление) отображает процент выполнения текущей операции.

34.Достоинства и недостатки трехмерной графики

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

Можно представить и иную ситуацию: не воображаемый объект встраивается в реальный фон, а наоборот, изображение реального объекта встраивается в трехмерную сцену как ее составная часть. Такой способ использования ЗD-графики применяют, например, для создания виртуальных выставочных залов или галерей, по стенам которых развешаны изображения реальных картин.

Компьютерные игры – одна из наиболее широких и испытанных областей применения ЗD-графики. По мере совершенствования программных средств моделирования трехмерной графики, роста производительности и увеличения ресурсов памяти компьютеров виртуальные трехмерный миры становятся все более сложными и похожими на реальную действительность.

Трехмерная графика помогает и там, где выполнение реальной фотосъемки невозможно, затруднительно или требует значительных материальных затрат, а также позволяет синтезировать изображения событий, которые не встречаются в обыденной жизни. В программе 3D Studio MAX 3.0 имеются средства, позволяющие имитировать действие на трехмерные объекты таких физических сил, как тяжесть, трение или инерция, а также воспроизводить результаты столкновений объектов.

Главные аргументы в пользу 3D-графики появляются тогда, когда речь заходит о создании компьютерной мультипликации. 3D Studio MAX 3.0 позволяет существенно упростить работу над мультипликационными видеофрагментами за счет использования методов анимации трехмерных сцен. Выше мы рассмотрели особенности трехмерной графики, которые можно отнести к ее достоинствам по сравнению с обычной двумерной графикой. Но, как известно, не бывает достоинств без недостатков. Недостатками трехмерной графики, которые следует учитывать при выборе средств для разработки ваших будущих графических проектов, можно условно считать:

  • повышенные требования к аппаратной части компьютера, в частности к объему оперативной памяти, наличию свободного места на жестком диске и быстродействию процессора;

  • необходимость большой подготовительной работы но созданию моделей всех объектов сцены, которые могут попасть в поле зрения камеры, и по присвоению им материалов. Впрочем, эта работа обычно окупается полученным результатом;

  • меньшую, чем при использовании двумерной графики, свободу в формировании изображения. Имеется в виду, что, рисуя картину карандашом на бумаге или средствами двумерной графики на экране компьютера, вы имеете возможность совершенно свободно искажать любые пропорции объектов, нарушать правила перспективы и т. п., если это необходимо для воплощения художественного замысла. В 3D Studio MAX 3.0 это также возможно, но требует дополнительных усилий;

  • необходимость контроля за взаимным положением объектов в составе сцены, особенно при выполнении анимации. В связи с тем, что объекты трехмерной графики «бестелесны», легко допустить ошибочное проникновение одного объекта в другой или ошибочное отсутствие нужного контакта между объектами.

38.Общие сведения о системе КОМПАС-3D LT

Система КОМПАС-ЗБ LT предназначена для создания трехмерных параметри­ческих моделей деталей и последующего полуавтоматического выполнения их рабочих чертежей, содержащих все необходимые виды, разрезы и сечения.

Система ориентирована на формирование моделей изделий, содержащих как ти­пичные, так и нестандартные конструктивные элементы.

Основные типы документов

В терминах KOMI1AC-3D LT любое изображение, которое можно построить средствами системы, принято называть документом. С помощью КОМПАС-ЗБ LT можно создавать документы трех типов: трехмерные изображения деталей, плоские чертежи и фрагменты. В случаях, когда идет речь о трехмерных изобра­жениях деталей, употребляется еще один термин — «модель». Построение моделей выполняется средствами модуля трехмерного моделирования.

Деталь — модель изделия, изготавливаемого из однородного материала без при­менения сборочных операций. Детали хранятся в файлах с расширением .m3d.

Чертеж — основной тип графического документа в КОМПАС-ЗБ. Чертеж содер­жит графическое изображение изделия, основную надпись, рамку, иногда — допол­нительные объекты оформления (знак неуказанной шероховатости, технические требования и т. д.). В чертеж КОМПАС-ЗВ всегда входит один лист заданного пользователем формата. В файле чертежа КОМПАС-ЗЭ могут содержаться не только чертежи (в понимании ЕСКД), но и схемы, плакаты и прочие графические документы. Чертежи хранятся в файлах с расширением xdw.

Фрагмент — вспомогательный тип графического документа в КОМПАС-ЗБ. Фрагмент отличается от чертежа отсутствием рамки, основной надписи и других объектов оформления конструкторского документа. Он используется для хранения изображений, которые не нужно оформлять как отдельный лист (эскизные про­рисовки, разработки-и т. д.). Кроме того, во фрагментах также хранятся созданные типовые решения для последующего использования в других документах. Файл фрагмента имеет расширение .frw.

Основные элементы интерфейса

По сравнению с традиционными Windows-приложениями в КОМПАС-ЗБ LT наложены ограничения на одновременную работу с несколькими документами. Таким образом, в главном окне системы может быть открыт только один документ: чертеж, фрагмент или деталь.

Команды вызываются из главного меню, контекстного меню или при помощи кнопок инструментальных панелей.

При работе с документом любого типа на экране отображаются главное меню и не­сколько инструментальных панелей: Стандартная, Вид, Текущее состояние, Компактная.

Главное меню системы служит для вызова команд (рис. 1.1). Вызов некоторых из них возможен также с помощью кнопок инструментальных панелей. По умолча­нию главное меню располагается в верхней части окна.

При выборе пункта меню раскрывается перечень команд этого пункта. Некоторые из команд имеют собственные подменю. Для вызова команды (выполнения соот­ветствующего действия) щелкните мышью на ее названии.

Стандартная панель содержит кнопки вызова команд стандартных операций с фай­лами и объектами (рис. 1.2).

Для вывода ее на экран служит команда Вид - Панели инструментов - Стандартная.

Панель Вид содержит кнопки вызова команд настройки вида активного докумен­та. Набор полей и кнопок панели Вид зависит от того, какой документ активен (рис. 1.3).

Для вывода ее на экран служит команда Вид - Панели инструментов - Текущее со­стояние.

Компактная панель содержит кнопки переключения между инструментальными панелями и кнопки самих этих панелей. Состав компактной инструментальной панели зависит от типа активного документа (рис. 1.5).

Использование контекстных меню

Команды для выполнения многих часто используемых действий можно вызвать из контекстного меню.

Эти меню появляются на экране при щелчке правой кнопкой мыши. Состав меню будет разным для различных ситуаций. В нем будут собраны наиболее типичные для данного момента работы команды.

Например, во время создания линейного размера при щелчке правой кнопкой мыши на экране появится меню, показанное на рис. 1.7.

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

Управление изображением модели

Для управления масштабом изображения модели предназначены команды Увели­чить масштаб рамкой, Увеличить масштаб, Уменьшить масштаб, Масштаб по выделенным объектам, Приблизить/отдалить, Показать все. Эти команды расположены в меню Сервис, а кнопки для их быстрого вызова — на панели управления.

Можно управлять коэффициентом изменения масштаба, использующимся при выполнении команд Увеличить масштаб и Уменьшить масштаб.

Чтобы передвинуть изображение модели в окне, щелкните на кнопке Сдвинуть па­нели Вид или вызовите соответствующую команду из меню Вид.

Для быстрого сдвига изображения (без вызова специальной команды) можно вос­пользоваться клавиатурными комбинациями Shift+Клавиши со стрелками. Нажатие любой из них вызывает перемещение изображения в соответствующую сторону.

Величина перемещения изображения при однократном нажатии управляющей клавиатурной комбинации называется шагом перемещения. Величину шага пере­мещения можно задать.

При создании модели может возникнуть необходимость видеть ее с разных сторон. Для этого в КОМПАС-ЗО LT предусмотрена возможность вращения модели.

Чтобы повернуть модель, вызывается команда Вид - Повернуть или нажимается кнопка Повернуть панели Вид.

Вы можете вращать модель вокруг центра габаритного параллелограмма, вокруг точки (вершины, центра сферы), вокруг оси (вспомогательной оси, прямолиней­ного ребра, оси операции) или вокруг оси, проходящей через указанную точку пло­скости (вспомогательной плоскости, плоской грани детали) перпендикулярно ей.

Часто требуется такая ориентация, при которой одна из плоскостей проекций располагается параллельно плоскости экрана (в этом случае изображение модели соответствует ее изображению на чертеже в стандартной проекции, например, на виде сверху или слева). Такую ориентацию трудно получить, поворачивая модель мышью. В этом случае для изменения ориентации можно пользоваться предусмо­тренным системой списком названий ориентации.

На панели Вид расположена кнопка Ориентация. Щелчок на стрелке рядом с этой кнопкой приводит к появлению меню с перечнем стандартных названий ориента­ции (рис. 1.8): Сверху, Снизу, Слева, Справа, Спереди, Сзади, Изометрия XYZ, Изометрия YZX, Изометрия ZXY, Прямоугольная диметрия (каждое из них соответствует направле­нию взгляда наблюдателя на модель).

В этом меню выбирается команда, соответствующая нужной ориентации. После этого изображение перестраивется в соответствии с указанным направлением взгляда.

Иногда требуется, чтобы плоскости экрана оказалась параллельна не проекционная плоскость, а вспомогательная плоскость или плоская грань детали. Чтобы устано­вить такую ориентацию, выделите нужный плоский объект и вызовите из меню кнопки Ориентация команду Нормально к...

В результате модель-поворачивается так, чтобы направление взгляда было перпен­дикулярно выбранному объекту.

Можно не только использовать стандартные названия ориентации, но и запоминать текущую ориентацию под каким-либо именем, а затем возвращаться к ней в любой момент, выбрав это имя в списке. Для этого нажимается кнопка Ориентация — в ре­зультате на экране появляется диалоговая панель со списком существующих в мо­дели названий ориентации. Далее нажимается кнопка Добавить, вводится название новой ориентации и нажимается кнопка Выход. Новое название появится в меню кнопки Ориентация панели Вид.

Управление режимом отображения детали

При работе в КОМПАС-ЗБ LT доступно несколько вариантов отображения мо­дели: каркас, представление без невидимых линий или с тонкими невидимыми линиями, полутоновое отображение. Чтобы выбрать вариант отображения, вы­зовите команду Вид - Отображение и укажите нужный вариант. Можно также вос­пользоваться кнопками панели Вид.

Каркас представляет собой совокупность всех ребер и линий очерка модели. Чтобы отобразить модель в виде каркаса, вызывается команда Вид - Отображение - Каркас или нажимается кнопка Каркас панели Вид.

При отображении модели с удалением невидимых линий изображение представляет собой совокупность видимых (при текущей ориентации модели) ребер, частей ребер и линий очерка модели.

Чтобы показать модель без невидимых линий, вызывается команда Вид - Отобра­жение - Без невидимых линий или нажимается кнопка Без невидимых линий панели Вид.

Невидимые линии (невидимые ребра и части ребер) можно отобразить отличающим­ся от видимых линий (более светлым) цветом. Чтобы вывести модель с невиди­мыми линиями другого цвета, вызывается команда Вид - Отображение - Невидимые линии тонкие или нажимается кнопка Невидимые линии тонкие панели Вид.

Полутоновое отображение позволяет увидеть поверхность модели и получить представление о ее форме. Чтобы получить полутоновое отображение модели, вызывается команда Вид Отображение Полутоновое или нажимается кнопка Полутоновое панели Вид. При полутоновом отображении модели учитываются оптические свойства ее поверхности (цвет, блеск, диффузия и т. д.).

Еще более реалистичное изображение детали в соответствии с особенностями зрительного восприятия человека можно получить с помощью перспективы. Точка схода перспективы расположена посередине окна детали. Все перечисленные режи­мы отображения (каркасное, полутоновое, без невидимых линий и с тонкими неви­димыми линиями) можно сочетать с перспективной проекцией. Для отображения модели с учетом перспективы вызывается команда Вид - Отображение - Перспектива или нажимается кнопка Перспектива панели Вид.

Какой бы тип отображения ни был выбран, он не оказывает влияния на свойства модели. Например, при выборе каркасного отображения модель остается сплошной и твердотельной (а не превращается в набор «проволочных» ребер), просто ее по­верхность и материал не показываются на экране.

44-50

Чтение графических данных

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

Наиболее распространенными являются программы чтения двух типов: фильтр и сканер. Фильтр читает исходные данные посимвольно, собирая их по мере поступления от устройства ввода или из файла. Сканер (также называемый анализатором) обеспечивает произвольный доступ ко всем исходным данным. В отличие от фильтров, которые не позволяют вернуться назад или перескочить вперед при чтении данных, сканеры могут читать любую информацию с какого угодно места файла. Основное различие между фильтрами и сканерами заключается в объеме используемой памяти. Хотя фильтры ограничены в способе чтения данных, они требуют для своей работы небольшого объема памяти. Зато сканеры, не имеющие подобных ограничений, могут потребовать для хранения информации больших объемов памяти или дискового пространства.

Программы чтения двоичных данных и данных в формате ASCII

Программы чтения двоичных изображений должны читать двоичные данные, записанные в 1-, 2- и 4-байтовых словах по одной из существующих схем порядка байтов. Растровые данные можно читать большими порциями и буферизировать их в памяти для ускорения обработки (вместо того, чтобы читать их попиксельно или построчно).

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

Чтение заголовка графического файла

Программы чтения графических файлов значительно различаются в зависимости от способов хранения данных. Например, файлы PCX содержат только двоичные данные, "оканчивающиеся младшим"; файлы Encapsulated PostScript включают и двоичные, и ASCII-данные; двоичные данные файлов TIFF могут быть записаны и в порядке байтов "оканчивается старшим", и в порядке "оканчивается младшим"; файлы AutoCAD DXF состоят только из данных в формате ASCII.

Многие графические файлы, содержащие данные только в формате ASCII, могут быть проанализированы посимвольно. В этом случае для чтения файла и идентификации ключевых слов и значений обычно применяются тщательно продуманные циклы и вложенные операторы выбора (анализатора символьной информации).

При чтении большинства растровых файлов вы обнаружите, что первой порцией записанных здесь данных является заголовок. В заголовках содержится информация об атрибутах графических данных, например о высоте и ширине изображения, количестве имеющихся в нем цветов. Если в данном формате всегда сохраняются изображения одинакового размера и типа, с постоянным набором цветов, то заголовок может и не потребоваться. В таком случае информация, необходимая для обработки такого формата, должна быть просто "зашита" в программу чтения.

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

Приведен пример типичного заголовка растрового файла, определенный в виде структуры на языке С. Поля этого заголовка содержат информацию о размере, цветах, типе изображения, флагах и имени файла изображения. Размер поля заголовка колеблется в пределах от 1 до 81 байта, а общая длина всей структуры составляет 128 байтов.

Первая потенциальная неприятность подстерегает вас еще до того, как вы начнете читать файл. Она затаилась в функции fopen(). Если вы не укажете, что открываете графический файл для чтения как двоичный (задав в списке аргументов функции fopen() вторым аргументом "rb"), то можете обнаружить в прочитанных данных лишние символы возврата каретки и/или перевода строки, которых не было в графическом файле. Это происходит из-за того, что по умолчанию функция fopen() открывает файлы в текстовом режиме.

В языке C++ нужно добавить дизъюнкцию ios::binary к аргументу режима конструктора fstream или ifstream:

fstream *fs = new fstream ("MYFORMAT.FOR", ios::in | ios::binary);

После того, как графический файл будет открыт, следующим шагом можно считать чтение его заголовка. С этой целью мы используем функцию fread(), применяемую для чтения порций данных из файла. Одним вызовом функции fread() мы сможем прочитать весь заголовок.

Основной проблемой, с которой вы можете столкнуться при чтении данных в структуру, является выравнивание элементов структуры (по границе машинного слова). В большинстве машин более эффективным является выравни­вание каждого элемента структуры по 2-, 4~, 8- или 16-битовым границам. Поскольку данная операция выполняется компилятором, а не программистом, то ее результаты не всегда очевидны.

Компилятор выравнивает элементы структуры по границам слова определенным образом: путем добавления заполнителей длина заголовка наращивается до 128 байтов. Но поскольку заполнители добавлены в конец заголовка, компиляторы могут добавить в структуру невидимые заполнители для того, чтобы:

• начать структуру с границы слова (с четного адреса памяти);

• выровнять каждый элемент по границам слова или двойного слова;

• обеспечить кратность размера всей структуры двум (16-битовые машины) или четырем (32-битовые машины).

Заполнители можно рассматривать как невидимые элементы, вставленные в структуру между элементами видимыми, определенными программистом. Хотя невидимые заполнители прямо не доступны, они, подобно любому видимому элементу, являются частью структуры.

Определение размера структуры

Cтруктура должна точно повторять формат заголовка компилируемого графического файла. Можно компилировать исходный текст модуля, содержащего структуру, с флагом, указывающим на то, что элементы этой структуры не должны выравниваться (/Zpl для компилятора Microsoft C++ и -а1 для компилятора Borland C++). Кроме того, для этих компиляторов вы можете заключить необходимую структуру в директивы #pragma; в этом случае выравнивание затронет только эту структуру, а не весь модуль.

Однако подобное решение не всегда удачно. Как мы уже отмечали, при выравнивании всех элементов структуры по границе байта процессор будет недостаточно быстро осуществлять доступ к данным структуры. Если использовать эту структуру вы будете довольно редко (как и большинство программ чтения файловых форматов), то можете не беспокоиться о том, как быстро читаются данные заголовка.

Кроме того, вы должны быть уверены в том, что любой человек, компилирующий ваш исходный код, будет применять флаг компилятора для выравнивания структуры по границе байта. В зависимости от того, на какой машине будет выполняться ваш код, при компиляции без этого флага могут возникнуть проблемы, связанные с чтением файлов изображений.

При попытке прочесть функцией fread() заголовок графического файла, который содержит данные, записанные на машине с порядком байтов "оканчивается младшим", с помощью программы, разработанной для машины с порядком "оканчивается старшим" (или данные, записанные с порядком байтов "оканчивается старшим" на машине с порядком байтов "оканчивается младшим"), вы получите только "мусор" из перевернутых байтов. Функция fread() не выполняет преобразования байтов для корректного чтения данных — она просто читает их в порядке байтов, "родном" для данного процессора.

Необходимо выполнить чтение каждого поля заголовка графического файла в элементы структуры и затем преобразовать порядок байтов

Чтение данных из графического файла

В большинстве случаев чтение данных изображения из графического файла не сопровождается какими-либо трудностями. Сжатые данные изображения обычно выравниваются по границе байта, и их нужно просто читать из файла в память побайтно, а затем распаковывать. Несжатые данные изображения часто хранятся побайтно, даже когда для представления одного пикселя отводится 2, 3 или 4 байта.

Сжатые данные читаются из памяти побайтно и распаковываются, а неструктурированная информация записывается либо в видеопамять дисплея, либо в растровый массив (для обработки и анализа).

Многие форматы растровых данных требуют, чтобы строки развертки (или фрагменты) однобитовых данных изображения были дополнены до границы следующего байта. Это значит, что если ширина изображения не кратна 8, в конец каждой строки развертки (в конец и/или в низ каждого фрагмента) добавляется по нескольку лишних нулевых битов. Например, однобитовое изображение шириной 28 пикселей будет содержать в строке развертки 28 битов данных, к которым будут добавлены 4 бита заполнителя, увеличивая таким образом длину строки развертки до 32 битов. Заполнитель позволяет начать следующую строку развертки с границы, а не с середины байта.

Необходимо определить, содержат ли несжатые данные изображения заполнители строк развертки. Спецификация файлового формата должна дать вам ответ на этот вопрос. Обычно заполнители загружаются в память дисплея вместе с данными изображения, но размер отображаемого окна (часть памяти дисплея, реально видимая на экране) должен быть отрегулирован таким образом, чтобы заполнители не отображались.

Запись графических данных

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

Запись заголовка графического файла

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

Запись данных в графический файл

Запись двоичных графических данных будет чуть сложнее, если постараться записать их в корректном порядке байтов. Многие форматы требуют, чтобы каждая строка развертки была дополнена в конце до границы байта или слова. Когда данные строки развертки читаются из файла, эти заполнители (обычно серии нулевых битов) отбрасы­ваются, но при записи в файл они обязательно должны добавляться.

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

Бели данные сохраняются в сжатом виде, то быстрее всего их можно сжать в памяти, а затем записать в графический файл. Бели для такой операции на вашем компьютере не хватает памяти, записывайте сжатые данные по мере их кодирования (обычно по одной строке развертки).

Тестовые файлы

Используются для определения файлового формата.

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

Задача состоит в том, чтобы достать как можно больше файлов из разнообразных источников и тщательно протестировать программу на изображениях с различными размерами, разрешением и вариантами. Другой подход состоит в том, чтобы получить файлы, созданные основной программой, и проверить их совместимость. Например, файлы, созданные Aldus PageMaker, часто используются вместо файлов TIFF. Но PageMaker, к сожалению, исторически был источником фактически недокументированных модификаций TIFF, поэтому тестирование совместимости с TIFF-файлами, созданными PageMaker, не даст доста­точно точных результатов.

Тестируйте программу с помощью максимально возможного количества разных вариантов формата, полученных из различных источников.

Искажение графических файлов

Причины искажения

Некачественная визуализация изображения может быть обусловлена рядом причин, среди которых следующие:

• Система отображения (драйверы, видеопамять, разрешающая способность дисплея) сконфигурирована некор­ректно либо ее мощность недостаточна.

• Программа визуализации не поддерживает данный файловый формат, но тем не менее пытается его отобразить.

• Программа визуализации не поддерживает данную модификацию файлового формата, но пытается ее отобразить.

• Программа визуализации некорректно обрабатывает данный файл.

• В файле записаны некорректные данные, возможно, они искажены.

Проблемы в системе отображения

Большинство проблем, связанных с визуализацией графической информации, можно устранить путем корректировки одного или нескольких параметров системы отображения. Например, при попытке передать изображение класса truecolor с помощью графического видеоадаптера или драйвера, которые не поддерживают необходимую для этого битовую глубину или разрешение изображения, программа визуализации либо уменьшит количество цветов в конечном изображении, либо вовсе откажется его воспроизводить. В любом случае результаты будут не такими, как хотелось бы.

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

Часто возникают проблемы, связанные с чтением файлов. Программа отображения обязательно должна проверять, воспринимает ли она формат читаемых данных. Например, если программа воспроизведения читает JPEG-файл как GIF-файл, то результаты могут быть самыми неожиданными.

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

В большинстве форматов расширение имени файла не зависит ни от уровня модификации формата, ни от типа хранимых в нем данных.

Проблемы в тексте программы

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

Проблемы в данных

Как и в других файлах, данные в графическом файле могут быть неправильно представлены (некорректные данные) либо повреждены (искаженные данные). Некорректные и искаженные файлы являются следствием одной или нескольких из перечис­ленных ниже причин:

• ошибки в программе записи файла,

• неисправленные ошибки передачи,

• неверная запись на диск,

• ошибки при обработке файла.

Некорректные данные могут быть следствием просчетов, допущенных при написании программы записи файлового формата. Ошибки в переменных заголовка (количестве цветов, разрешении, размере файла и т.д.) или запись данных в неверном порядке байтов приведут к тому, что программа чтения формата будет неверно интерпретировать данные файла изображения. Ошибки в программах кодирования и декодирования (кодеках) могут привести к ошибкам при кодировании данных. В таких случаях кажется, что программа работает нормально, хотя на самом деле алгоритм сжатия нарушает структуру данных (например, спецификация TIFF неверно интерпретирует алгоритм LZW).

Искажение файлов может происходить по нескольким причинам:

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

• Копирование файла в поврежденную файловую систему или на поврежденный диск приводит к ошибкам записи, которые частично разрушают файл.

• В случае некорректной обработки особой ситуации возможна запись данных в виде разрозненных частей, что вызывает порчу всех файлов, которые участвуют в этой операции.

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

Выявление искажений данных файла

Программы чтения файловых форматов должны быть способны быстро обнаруживать в файлах некорректные данные, а также отклонения от спецификации файлового формата и алгоритма сжатия данных. Быстрое обнаружение неточностей позволит программе выдать сообщение об ошибке и предотвратит ее отказ в работе, вызванный чтением неверных данных. Кроме того, программа чтения должна быть способной точно проанализировать возникшую ситуацию. Важное значение имеет также текстовое сообщение об ошибке, выданное пользователю программы.

Несколько признаков, по которым можно обнаружить искаженный файл.

Метка конца файла

Метка конца файла (EOF) — указывает на то, что файл запорчен. Часто графические файлы усекаются из-за ошибок передачи или вследствие неудачной операции записи на диск. В таких случаях метка EOF появляется гораздо раньше, чем ее ожидает программа чтения формата, и, как правило, свидетельствует об искажении файла. Операции чтения также не выполняются при наличии ошибки в файловой системе или на диске. Всегда проверяйте коды завершения, возвращаемые операциями чтения. Неожиданно появившаяся метка конца файла или ошибка чтения потока данных из файла — верный признак того, что есть повод для беспокойства.

Неожиданные символы.

Отсутствие данных, равно как и наличие лишних, может привести к нарушению в расположении внутренних структур данных файлового формата. Структуры данных в памяти могут содержать 2- или 4-байтовые заполнители (для выравнивания структурных элементов по границам), которые могут "перекосить" структуру файла при чтении на другой платформе. Если файл изображения открыть в текстовом режиме, а не в двоичном, то текстовый фильтр может "дописать" в него символы возврата каретки и/или перевода строки, что неизбежно приведет к некорректной визуализации изображения.

Ошибки в магических числах

Потоковые форматы делят записываемые данные на разделы, которые называются сегментами (блоками, порциями и т.д.). Каждый сегмент начинается особым идентификатором или "магическим числом", за которым следует значение длины данных сегмента. Если программа чтения формата, прочитав весь сегмент, обнаружит, что следующие данные в файле — это не ожидаемое магическое число следующего сегмента (либо потоковый маркер конца данных), то она справедливо посчитает, что информация является неверной либо искаженной.

Выход значения смещения за пределы диапазона

При поиске данных в файловых форматах обычно используются структуры данных фиксированного размера и абсолютные значения смещений. Значение смещения, которое выходит за пределы файлового пространства, — верный признак того, что смещение указано неверно, или того, что файл усечен.

Советы по построению программ чтения и записи файлов

Как должна поступить программа чтения файлового формата в случае недостатка или избытка данных? Все зависит от структуры формата и самих данных. Если некорректная информация не критична (например, это текстовый комментарий или пиктограмма), то программа может проигнорировать эти данные и продолжить чтение файла. Если же информация необходима (например, это заголовок), то программа не сможет далее функционировать.

Независимо от предпринимаемых мер, программа чтения должна выдать предупреждение — сообщение об ошибке или диагностическое сообщение, информирующее пользователя о том, что произошло нечто неожиданное. Сообщения типа Unknown file format (Неизвестный формат файла), Unknown compression type (Неизвестный тип сжатия), Unsupported resolution (Неподдерживаемое разрешение). Corrupted data (Искаженные данные) помогают пользователю хотя бы приблизительно установить, в чем причина сбоя.

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

• Всегда проверяйте операции ввода на предмет наличия ошибок чтения файлового потока и признаков конца файла.

• Проверяйте данные полей заголовка на соответствие установленному диапазону значений. Не используйте данные, которые вызывают сомнение.

• Ни в коем случае не определяйте файловый формат по расширению имени файла. Устанавливайте формат файла исключительно по данным, которые должны быть в заголовке.

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

• Повредите с помощью двоичного редактора несколько графических файлов и проверьте, как ваша программа их прочтет.

Построение программы записи файла:

  • Всегда проверяйте операции вывода на предмет наличия ошибок записи файлового потока.

  • Сохраняйте размеры файла и структур данных в заголовке файла, если это допускается.

  • Используйте встроенные методы обнаружения ошибок (например, контроль с помощью циклического избыточного кода), поддерживаемые спецификацией данного формата.

  • Применяйте для проверки сгенерированных файлов другие программы визуализации.

Большинство файловых форматов не содержит встроенных механизмов обнаружения ошибок. Предполагается, что программа чтения выявит неверные и искаженные данные на основании информации, записанной в файле и примет соответствующие меры. В некоторых форматах информация о размере графических данных, иногда и о длине всего файла, хранится в заголовке. Отдельные форматы содержат структуры данных фиксированного размера, которые изменяются только при переходе на новую версию формата. Эти особенности форматов не предназначены специально для обнаружения и коррекции ошибок в структуре файла или его данных, но тем не менее могут использоваться и для этих целей.

Если спецификацией формата контроль ошибок не предусмотрен, то файлы можно сохранить с помощью программы-архиватора, выполняющей аналогичную функцию. Многие архиваторы, например pkzip и zoo, производят вычисление циклического избыточного кода для каждого сохраняемого ими файла. Когда файл разархивируется, значение кода пересчитывается и сравнивается с записанным ранее. Если эти значения совпадают, файл не искажен. Архивировать графические файлы особенно целесообразно в случае пересылки их по сети передачи данных, например по Internet.

Еще один тип внешнего механизма обнаружения ошибок — цифровая подпись (сигнатура) — представляет собой метод выявления изменений в блоке информации.

Шифрование графических файлов

Криптография — это техника засекречивания информации (определяем понятие секретный как защищенный от несанкционированного доступа).

Физическая защита

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

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

Оригинальные форматы файлов

Данные, записанные в файле какого-то неизвестного формата, прочесть очень сложно или вообще невозможно. Если же для сохранения данных воспользоваться одним из хорошо известных форматов графических файлов, то опытный программист запросто напишет программу, с помощью которой доберется до вашей информации, причем без всякого на то разрешения. Поэтому может показаться, что создание оригинального формата графических файлов — формата, "внутренности" которого держатся в секрете, — наверняка защитит ваши данные. Беда в том, что квалификация тех, кто хочет увидеть и изменить ваши графические файлы, может быть гораздо выше вашей квалификации.

Даже самой общей информации может быть достаточно для организации "нападения". Например, человек, который знает, что ваш файл растровый, наверняка знает и то, что подавляющее большинство таких файлов содержат заголовок фиксированной длины, за которым следуют данные изображения. Все растровые заголовки имеют сходную информацию, например о размере растра и количестве битов в пикселе. Разработка заголовка "с нуля" (а тем более построение нового формата на базе хорошо известного) и размещение за ним данных, закодированных традиционным методом сжатия (а еще в большей степени — вообще без сжатия), задержит решительного "взломщика" форматов совсем ненадолго.

Допустим, что с помощью метода дедукции можно получить самую ценную часть содержимого — заголовок — даже неизвестного графического файла. А как насчет самих данных изображения? Растровые данные обычно хранятся в виде пикселей размером 1, 8 или 24 бита. Пиксельные значения, как правило, индексируются по цветовой таблице либо записываются непосредственно с помощью трехцветной модели, например RGB или CMY. Лишь в нескольких форматах растровые данные хранятся по-другому, поэтому определить формат растра может быть так же легко, как установить содержимое заголовка.

Оригинальные методы сжатия

Растр можно сжать, что позволит "спрятать" формат растра. Но стоит идентифицировать лишь начальный байт растра — дальше уже дело техники: для распаковки данных можно попробовать любой из десятка-другого общеизвестных алгоритмов. В некоторых случаях тип сжатия можно установить по шестнадцатиричному дампу той части растра, которая представляет собой один цвет. Даже если строки развертки растра записаны непоследовательно (как, например, в чересстрочных GIF-файлах), это не помешает определить примененный алгоритм сжатия.

Один из способов защиты заключается в использовании метода сжатия, отсутствующего в инструментарии "взломщика" форматов (неплохо было бы заранее узнать, какого!). К сожалению, алгоритмы сжатия данных предназначены только для их физического уменьшения, а не для защиты от посторонних (и внутрисхемных эмуляторов). Конечно, неопубликованные, оригинальные методы сжатия (например, фрактальное сжатие) также считаются формой шифрования данных, потому что детали их реализации держатся в секрете. Защита данных в таких случаях обеспечивается сложностью самих методов и не является результатом применения устойчивых алгоритмов. Их взлом — вопрос времени.

Сомнительно, чтобы небольшая фирма или даже неординарный программист обладали возможностями для создания метода сжатия, радикально отличающегося от JPEG, LZW и CCITT Group 4 или хотя бы не уступающего им. Можно изменить общеизвестный алгоритм сжатия так, чтобы его можно было "взломать" только никому не известным методом, запретив таким образом его декодирование традиционными способами. Однако это сопряжено с риском уменьшить эффективность метода сжатия: размер сжатых файлов увеличивается, скорость их распаковки падает. Кроме того, может возникнуть ложное чувство безопасности.

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

Зачем вообще шифровать графические файлы?

Обычно пользователи шифруют свои графические файлы для того, чтобы:

Спрятать содержимое файла от посторонних глаз.

Предотвратить незаконное копирование файла. Зашифрованные файлы в принципе можно копировать, но несанкционированное копирование может оказаться бесполезным занятием. Файлы, распространяемые на CD-ROM, можно использовать только после расшифровки с помощью специального ключа. Этот ключ обычно выдается пользователю, когда он регистрирует продукт. Можно перехватить зашифрованные файлы, передаваемые по модему, но без ключа ими невозможно будет воспользоваться. (Следует помнить, что стоит только злоумышленнику определить ключ, как файлы будут расшифрованы.)

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

Установить, не запорчен ли файл. Искажение зашифрованных файлов легко выявляется при их расшифровке. Любые изменения в зашифрованных данных, пусть даже одного байта, останавливают процесс расшифровки. Однако при этом фиксируется лишь факт искажения, но не место в файле, где это искажение присутствует. В данном случае лучше воспользоваться цифровыми подписями или просто контрольными суммами. Искажение в файле можно выявить и при его распаковке. Но так как большая часть графических файлов (растровые данные, данные в цветовых таблицах и заголовке) сжатию не подлежит, то и искажение в такой части обнаружено не будет. Во многих форматах (например, в BMP) растровые данные обычно хранятся неупакованными, а в некоторых других (в частности, в большинстве векторных форматов) сжатие вообще не предусмотрено. Конечно, вы можете выбрать для своих графических файлов более простой метод обнаружения ошибок в данных (например, сохранение файлов с помощью программы-архиватора, выполняющей такую функцию), но шифрование также будет полезным для этой цели, особенно если у вас нет возможности исправлять содержимое файла.

Предотвратить изменения содержимого файла. Собственно шифрование не может полностью застраховать ваши файлы от внесения изменений. Этому может способствовать только надежная система хранения файлов. В качестве защитной меры вы можете обнародовать сам факт шифрования графических файлов; возможно, это удержит злоумышленников от попыток изменить ваши файлы и даже от попыток искать их.

Идентифицировать создателя файла (человека или программу). Шифрование может также служить для создания связанной с конкретным файлом цифровой подписи, своего рода "отпечатка пальца". Цифровая подпись не только идентифицирует создателя файла, но и может включать штамп времени создания подписи. Большинство систем шифрования позволяют сформировать цифровую подпись без шифрования данных как такового.

Основные понятия

Шифрование не является разновидностью сжатия данных. Во многих криптографических системах, конечно же, используются алгоритмы сжатия данных, позволяющие сжимать данные перед шифрованием. Однако эта операция зачастую выполняется не столько для уменьшения физического размера данных, сколько для удаления избыточной информации, которая облегчает "взлом" файла. Именно по этой причине многие зашифрованные файлы физически меньше, чем исходные незашифрованные.

Шифрование — это и не защита от копирования. Зашифрованные файлы можно копировать с компакт-дисков, дискет и жестких дисков так же, как и все остальные. Схемы защиты от копирования, как правило, физически изменяют носитель, на котором записаны файлы, или нестандартно форматируют его (пример тому — формат DMF фирмы Microsoft). И хотя в некоторых схемах защиты от копирования применяется шифрование файлов, собственно шифрование не защищает файлы от копирования, а лишь пытается предотвратить их использование.

Целесообразность шифрования данных:

• Шифрование предназначено специально для того, чтобы позволить вам добираться до своих данных, не давая этого сделать посторонним.

• Шифрование дает вам возможность работать со стандартными графическими файлами как со своими незашифрованными данными.

• Зашифрованные файлы не должны быть скрытыми или защищенными от копирования. Они могут быть свободно доступными для копирования и чтения.

• Алгоритмы шифрования гораздо сложнее взломать, чем оригинальные файловые форматы и алгоритмы сжатия данных. Кроме того, если станет известно, что ваши файлы зашифрованы, то количество попыток заполучить их нелегальным путем значительно сократится.

• Ваши файлы будут оставаться в безопасности до тех пор, пока не будет разгадан сам алгоритм шифрования и не станут известны ключи шифрования.

Существуют две основные криптографические системы — шифрование закрытым ключом и шифрование открытым ключом.

В системах с закрытым ключом и для шифрования, и для расшифровки информации используется одно секретное слово (пароль) или секретная (парольная) фраза. Ключ должен быть и у того, кто зашифровывает информацию, и у всех тех, кто имеет право на дешифрование. Если посторонний получит в свои руки зашифрованную информацию и ключ, то, зная, какой применяется алгоритм шифрования, он запросто сможет получить к ней доступ.

В системах с открытым ключом используется алгоритм генерации двух математически связанных ключей. Данные, зашифрованные одним ключом (открытым), можно расшифровать только вторым ключом (секретным) и парольной фразой к нему. Информация будет защищена, если ни у кого нет копии вашего секретного ключа и сведений о парольной фразе к нему (и если вы не оставили где-нибудь расшифрованные копии своих файлов).

Системы с открытым ключом обладают существенными преимуществами по сравнению с системами с закрытым ключом. Предположим, вы передаете файлы, зашифрованные закрытым ключом, своему другу, живущему в другом конце страны. Ваш друг сможет расшифровать их только тогда, когда получит от вас пароль, использованный для их шифрования. Но как сообщить ему этот пароль незаметно для посторонних? Если пароль перехватят вместе с файлами, то ваши данные попадут в чужие руки.

Если же воспользоваться системой с открытым ключом, то для шифрования файлов вам понадобится только открытый ключ вашего друга. Получив от вас файлы, он расшифрует их собственным секретным ключом и парольной фразой к нему. Передавать секретную фразу вместе с файлами не нужно, открытый ключ вашего друга (по сути, ваш собственный) не нужно прятать. Более того, вам выгоднее, чтобы ваш открытый ключ был у как можно большего числа людей и они могли бы посылать вам свои зашифрованные файлы.

В шифровании есть свой риск и свои проблемы:

• Чем больше людей будет знать ваш пароль или парольную фразу и иметь доступ к вашим секретным ключам, тем меньше будут защищены ваши данные. Они еще в большей степени станут легко доступными, если метод шифрования будет широко известен.

• Даже если ваши ключи и пароли надежны, выбранный метод шифрования таковым может и не быть. Теоретически для каждого алгоритма кодирования данных существует как минимум один метод их расшифровки.

• Ни одна криптографическая система не может быть идеально надежной. Даже самые теоретически устойчивые методы шифрования могут вас подвести, если будут реализованы с просчетами в разработке и ошибками в коде.

• Шифрование всегда влечет за собой снижение производительности программы. Особенно медлительны в шифровании и расшифровке данных системы с открытым ключом.

• Почти все виды систем шифрования запатентованы. Для применения даже тех из них, которые свободно доступны, необходима лицензия.

• Существует целый ряд импортно-экспортных ограничений, которые затрудняют распространение и продажу программного обеспечения по шифрованию.

Применение программы PGP для шифрования графических файлов

PGP — это надежная система шифрования открытым ключом, разработанная Филом Циммерманом. Она представляет собой настраиваемое инструментальное программное средство, способное создавать открытые и закрытые ключи и управлять ими, создавать цифровые подписи и интегрироваться в другие программы, например в редакторы текстовых и графических файлов и программы электронной почты. PGP свободно распространяется для некоммерческого использования.

Как зашифровать графический файл с помощью этой программы? Это зависит от того, в каком виде вы хотите сохранить результирующие зашифрованные данные: в двоичном или в текстовом. Для того чтобы PGP записала зашифрованные данные в двоичный файл, необходимо дать такую команду:

unix% pgp –с private.gif

Эта команда дает PGP-программе указание прочитать файл private.gif и создать новый файл с именем private.pgp. Содержимое файла private.pgp двоичные данные, являющиеся зашифрованным представлением информации, записанной в файле private.gif. Если вы попытаетесь просмотреть private.pgp в текстовом редакторе, то увидите бессвязный и малопонятный двоичный "мусор".

Если же вы желаете сохранить зашифрованные данные в текстовом формате, необходимо дать команду

unix% pgp -ca private.gif

PGP создаст файл с именем private.asc. Этот файл будет содержать зашифрованную версию файла private.gifv в виде символов ASCII. Если вы загрузите файл private.asc в текстовом редакторе, то увидите приблизительно такое:

-----BEGIN PGP MESSAGE-----Version: 2.6

pgAAAm5mv5vjsqw+3E+nZvfweBVh8+h4xueb3LnyKgyDjReGzxdvfZcyPQQCXrb9

ghj53cGHbmnb89/hgjkh89jtVBNbsb84 /ucTufUikacbsjtu8902wVBHKJPOgsIn

NRTooEbyweh57d9VBNYR8989hjth ja s;pr8c8f8akxOsOc5q567ALSKDOg014161

o+cCC_C+U

epnn

=jE5E

-----END PGP MESSAGE-----

Вместо двоичного "мусора" вы получите свой зашифрованный файл, закодированный в текстовые данные по алгоритму двоично-текстового кодирования кодом radix-64. Такой файл будет на одну треть больше файла, зашифрованного и записанного в двоичном формате. Это объясняется тем, что код radix-64 превращает каждые три двоичных знака в четыре символа ASCII. Этот результат хорошо известен всем, кто пользовался программой uuencode в среде UNIX.

Что это значит для вас? Вы можете сохранять свои графические файлы как двоичные или текстовые данные. Содержимое файлов будет скрыто. По внешнему виду зашифрованных данных невозможно будет понять, к какому типу файлы относятся. Если эти файлы как-нибудь изменить или запортить, то расшифровать их содержимое надлежащим образом будет невозможно. Этого нельзя будет сделать и в случае несовпадения секретного ключа и пароля.

Таким образом, вы можете воспрепятствовать "вскрытию" содержимого файла, выявить наличие изменений в зашифрованном файле и даже скрыть тип данных, содержащихся в нем. Но как с помощью PGP установить, кто создал файл? Для этого в данной программе применяются цифровые подписи.

Цифровая подпись — это число, сформированное по особому алгоритму, который называется функцией комбинированных сообщений. Эта функция считывает данные из вашего файла и генерирует уникальное для них значение. Изменение хотя бы одного бита в файле приведет к созданию совершенно другой цифровой подписи.

Цифровые подписи обычно применяются для аутентификации отправителя электронно-почтового сообщения. Уникальная цифровая подпись создается из данных файла, зашифровывается закрытым ключом отправителя и добавляется к сообщению. Адресат получает открытый ключ отправителя, расшифровывает цифровую подпись и вычисляет цифровую подпись по сообщению. Если цифровая подпись совпадает с подписью, поставленной под сообщением, то получатель смело может считать, что сообщение было отправлено владельцем открытого ключа.

Вы можете взять любой графический файл и подписать его с помощью PGP. Эту подпись можно использовать для аутентификации создателя файла (человека или программы), а шифровать содержимое файла не нужно. Вот как это делается с помощью PGP:

unix% pgp -s private.gif

Эта команда "подписывает" файл private.gif, пользуясь вашим закрытым ключом и парольной фразой. Зашифрованная подпись добавляется к данным и записывается в файл private.pgp. Данные из файла не шифруются. Если вы хотите их зашифровать, дайте вместо приведенной выше команду

unix% pgp -se private.gif

Эта команда зашифровывает данные, "подписывает" содержимое файла и помещает данные в файл private.pgp. По умолчанию подпись является двоичным значением. Если вам нужна текстовая подпись, дайте команду

unix% pgp -sea private.git

Эта команда создает файл private.asc, который содержит зашифрованные данные и подпись в формате ASCII. Если входной файл содержит не двоичные данные, а текст, добавляется еще один параметр:

unix% pgp -seat private.dxf

Примечание'. PGP представляет собой независимую программу, перенесенную на большинство платформ (компьютеров и операционных систем). Запускается она обычно из командной строки. Прикладная программа, применяющая программу PGP версии 2-х, может использовать PGP как отдельно выполняющуюся программу. В PGP версии 3.0 предусмотрено наличие библиотеки инструментальных средств интерфейсов прикладного программирования, которая может непосредственно связываться с прикладными программами.

Вирусы в графических файлах

Компьютерные вирусы — проблема, в той или иной степени волнующая каждого пользователя. Вирусы, часто приносящие вред, — это результаты работы иногда почти необнаруживаемых программ.

Обобщить все материалы, накопленные о компьютерных вирусах, очень трудно. Первое, что следует сказать: как правило, эти программы не очень сложны. В большинстве случаев вирус представляет собой простую самовоспроизводящуюся программу, которую трудно обнаружить пользователю и операционной системе. Некоторые вирусы, конечно, могут наносить большой вред (есть, например, вирусы, специально написанные для разрушения файлов и останова сетей), но в основном они наносят ущерб лишь случайным образом, вследствие имеющихся логических ошибок в коде или из-за несовместимости их кода с кодом системы, в которой они выполняются. Есть и такие вирусы, которые созданы специально для того, чтобы раздражать пользователя. В некоторых случаях они прямо-таки мучают свою жертву, которая с ужасом осознает, что ее компьютером управляет (по крайней мере частично) некто посторонний.

Почему мы употребляем термин компьютерный вирус? Рабочие характеристики компьютерных вирусов удивительно похожи на свойства вирусов биологических. Основная цель биологического вируса — воспроизводство. Вирус — это лишь фрагмент РНК или ДНК, поэтому он не является тем, что принято считать живым организмом. Из-за неспособности к самовоспроизводству биологический вирус заражает некий живой организм, в котором он может размножаться; этот процесс часто приводит к болезни или смерти данного организма.

Выполняя зараженную основную программу, операционная система, сама того не ведая, выполняет и вирусный код. Этот вирусный код предназначен для поиска других совместимых основных программ и присоединения к ним копий самого себя. Если код-вирус инфицировал другую программу, то говорят, что вирус воспроизвелся. Большинство исполнимых программ, такие как файлы с расширениями .СОМ и .ЕХЕ в системах на базе MS-DOS, содержат машинный код и непосредственно выполняются операционной системой. Вирус может инфицировать только те файлы, на заражение которых он рассчитан.

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

Могут ли заражаться вирусами графические файлы? Угрожает ли вашей системе опасность со стороны инфицированных графических файлов?

Графические файлы представляют собой совокупности данных и как таковые не выполняются операционной системой компьютера. Программы, которые пользуются графическими файлами, например программы воспроизведения и редактирования, просто считывают данные из графического файла в память, а затем изменяют их для воспроизведения на устройстве вывода. Графические файлы не могут быть заражены вирусом, так как не являются выполнимыми (не имеют такого кода). Статические графические файлы (т.е. не содержащие кода) вообще защищены от инфекции.

Некоторые графические файлы, в частности используемые в мультимедиа-приложениях, все-таки могут включать команды, которые выполняются конкретными прикладными программами. С помощью таких команд отображается текст, воспроизводится звук, выводится меню, читаются данные из других файлов. Объектно-ориентированные файлы, содержащие данные и код, необходимый для воспроизведения таких данных, также относятся к этой категории. Файлы такого типа теоретически уязвимы для вирусной инфекции, однако ни один случай заражения пока не известен. Ситуация может измениться по мере усложнения командных последовательностей, необходимых для качественного воспроизведения отдельных файлов. Но пока что ни один из распространенных файловых форматов не имеет такого уровня сложности.

Примечание: Что можно сказать в этом контексте о языках описания страницы (PDL) типа PostScript и гипертекстовых языках типа HTML? Эти языки по сути являются не форматами графических файлов, а совокупностями интерпретируемых операторов, которые могут содержать графические данные либо ссылаться на них. Хотя сами графические данные не являются мишенью для вирусов, может быть изменен код в интерпретируемом языке и использованы известные слабые места в его защите.

Подводя черту сказанному, следует отметить, что графические файлы — очень "неподходящие кандидаты" для заражения компьютерным вирусом. Большинство программ обнаружения вирусов просматривают графические файлы только по особому указанию. Конечно, вирус все равно может нанести ущерб графическому файлу, как и любому другому (например, он может скопировать, переместить, изменить, запортить или удалить файл, а то и добавить в него данные для увеличения размера), однако он не может использовать графический файл, содержащий только данные (как и любой другой такой файл), для воспроизводства.

Проектирование собственного формата

Трудно объяснить, почему у кое-кого возникает мысль о том, что мир нуждается еще в одном формате графических файлов. И мы не хотим создать впечатление, будто поддерживаем и поощряем подобные стремления. Однако, учитывая такую возможность, мы хотели бы дать таким людям несколько ориентиров.

Зачем создавать новый формат?

Мы даже не пытались включить в эту книгу сотни "туманных" форматов, многие из которых используются исключительно в частных целях, не выходя из стен компаний. Компании, желающие сохранить право собственности на свои программные продукты, всегда найдут способ реализовать это и, следовательно, будут создавать новые форматы.

Разработка собственного формата может также помочь вам избежать неприятностей, если чей-то формат однажды будет запрещен для легального применения. К примеру, использование формата GIF недавно попало под лицензионные ограничения, требующие выплаты лицензионных платежей за программное обеспечение, которое читает или записывает файлы в этом формате. На этих платежах под угрозой судебного преследования настояли как владельцы формата GIF, так и владельцы использованного в нем алгоритма сжатия Лемпела-Зива-Велча (LZW). Необходимо помнить о том, что хотя многие форматы кажутся общедоступными, но фактически лишь немногие таковыми являются.

При разработке собственного формата нужно учитывать ряд соображений. Вы можете решить, что подходящий формат еще не создан и это необходимо сделать. Однако рассуждения, приведшие вас такому решению, всегда вызывают сомнения, а в наш век — век возрастающей межпрограммной совместимости и обмена файлами — это может даже уменьшить вашу долю рынка. Правда, файловые форматы обычно разрабатываются в поддержку уже созданной программе. В современном мире маркетинговые решения и предположения о будущем развитии поддерживающих операционных систем и аппаратных платформ имеют важное значение при разработке программной спецификации, причем с самого начала этих работ. Мы советуем вам, прежде чем приступить к разработке своей программы, рассмотреть множество существующих форматов или хотя бы разработать модель создаваемого формата.

Но если все же вы должны...

Если вам все же придется разрабатывать собственный формат, руководствуйтесь следующими правилами:

• Изучайте чужие ошибки. Не думайте, что вы достаточно умны для того, чтобы избежать подобных ошибок до того, как их увидите.

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

• Пусть ваш формат будет простым. Миру меньше всего нужен еще один формат "только для записи". Он должен легко читаться, а не только легко записываться.

• Документируйте абсолютно все! Используйте согласованную терминологию, которую смогут понять и будут понимать как можно дольше многие. Нумеруйте ваши документы модификаций формата подобно самим модификациям. Это позволит вам легко заметить, что вы "забыли" задокументировать новую особенность.

• Разрабатывайте формат до, а не после того, как вы создали программу. Стройте свою программу на формате. Невзирая на "провокации", не делайте "удобных обновлений".

• Избегайте машинной зависимости, но не усложняйте формат, обеспечивая поддержку переносимости.

• Найдите однозначные признаки, по которым программа чтения сможет идентифицировать формат.

• Спецификация должна быть доступной. Не отказывайте в информации людям, интересующимся вашим форматом, даже если они не являются зарегистрированными пользователями вашего продукта. Чем шире распространена ваша информация, тем большим будет потенциальное признание вашего формата.

• Если ваш формат действительно удачен, он завоюет рынок! Пишите программы, использующие ваш формат. Создание форматов может приносить прибыль благодаря маркетинговой силе компаний, распространяющих программные продукты. Если вы считаете свой формат уникальным с точки зрения способов хранения информации и уверены, что он заполнит свободную нишу на рынке, то всячески рекламируйте его.

• Объявите ваш формат свободно копируемым. Если это угрожает интересам вашей компании, разрешите использование со ссылкой. Не препятствуйте распространению вашего формата путем угроз по поводу нарушения авторских прав и собственности на информацию, записанных в спецификации. Это только помешает вашему формату получить достаточно широкое распространение и отпугнет программистов, которые были бы счастливы бесплатно поддержать "план мирового господства вашей компании".

• Разрабатывайте канонические тестовые файлы, делая их общедоступными. Помещайте в них изображение, содержащее название вашей фирмы, информацию о типе данного формата, цветовой модели, разрешении и даже пиксельной глубине данных. Это может стать хорошей формой рекламы для вас и вашей компании и наверняка будет способствовать широкому распространению ваших программных продуктов без малейших усилий с вашей стороны.

Последнее слово

Помните, что уже существует огромное количество программ, а также море библиотек (в виде исходных текстов), способных удовлетворить ваши потребности. Прислушайтесь к следующему мнению, полученному из списка FAQ (Frequently Asked Questions — часто задаваемые вопросы) телеконференции Internet comp.graphics.misc:

"Документация по форматам TIFF, IFF, BIFF, NFF, OFF, FITS и др. вам практически никогда не понадобится. Читайте раздел по бесплатным программным продуктам обработки изображений. Достаньте один или несколько таких пакетов и просмотрите их. Очень велика вероятность того, что конвертер, который вы собрались писать, среди них."

Разработка спецификации файлового формата

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

Следующий этап — просмотр всех спецификаций формата, похожих на вашу, с тем чтобы установить, где вы сбились с пути. Затем нужно вернуться и исправить свой список. И так несколько раз! Это проверка на честность, интеллект и трудолюбие. Никто (и это действительно так) пока не избежал ошибок. Возможно, вы станете первым.

Советы по составлению спецификаций

Просматривая ворох спецификаций форматов, вы не встретите среди них двух одинаковых (не считая разработанных правительством и военными — в этом случае одинаковы все). Более того, вы обнаружите, что большинство из них плохо составлены и очень сложны. Как избежать повторения подобных ошибок? Вот несколько советов по этому поводу:

• Спецификация большого объема должна сопровождаться содержанием, библиографией и предметным указателем. Однако большинство спецификаций обычно занимают не более 10-12 страниц, поэтому потребности в этом не возникает.

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

• Подробно изложите историю создания спецификации, включив информацию о различиях между настоящей версией и всеми предыдущими (а не просто даты обновления). Укажите причины создания этого формата. Приведите подробности процесса его разработки. Остановитесь на том, какими отличительными особенностями, по вашему мнению, будут обладать будущие версии. Укажите фамилии разработчиков и других участников проекта — тем самым вы покажете, что за данными, из которых состоит ваш формат, пульсирует разумная человеческая мысль.

• Перечислите особенности своего формата и укажите, как он, по-вашему, должен применяться и в каких случаях не пригоден. Обоснуйте отсутствие в нем тех особенностей, которые могли бы привлечь внимание пользователей (например, поддержки множества изображений, популярных методов сжатия данных и т.д.). Разъясните разработчику, почему он должен использовать именно этот формат, а не связываться с другими.

• Приведите блок-схемы и примеры кода (лучше всего на ANSI С) внутренних структур данных формата. Снабдите комментариями реальные примеры текстовых данных формата и шестнадцатиричные дампы двоичных данных. Такая информация поможет программистам быстро и правильно реализовать код, обрабатывающий ваш формат.

• Если ваш формат предусматривает сжатие данных, контроль ошибок, шифрование и т. д. (в одной или нескольких формах), поместите эту информацию в отдельный раздел и приведите побольше примеров (как описаний, так и кода) функционирования этих алгоритмов. Дайте математические формулы, если считаете, что они помогут прояснить эти концепции.

• Подготовьте спецификацию и в документальной, и в электронной формах. Документальная версия должна быть отформатирована как технический документ с использованием такого шрифта, качество которого не ухудшится при снятии с документа копии. Используйте страницу стандартного размера, чтобы не было проблем при вкладывании документа в почтовый конверт. Электронную версию необходимо сделать в двух форматах: ASCII и PostScript. Подготовка спецификации в формате текстового процессора — дело хорошее, но вовсе не обязательное.

• Рассмотрите возможность создания для своего формата инструментального пакета разработчика. Набор тестовых графических файлов (по одному для каждой разновидности формата) и синтаксический анализатор, написанный на ANSI С для чтения и записи вашего формата, окажут программистам огромную помощь. Такой комплект позволит разработчикам ускорить реализацию вашего формата в своих продуктах и поможет свести к минимуму возможность появления многочисленных пакетов программ, которые создают графические файлы, не соответствующие вашей спецификации. Примерами форматов, сопровождаемых инструментальными пакетами, могут служить TIFF, TGA, WPG и PNG.

• Передайте готовую спецификацию на все узлы FTP, Gopher и World Wide Web, а также на все BBS, где есть архивы спецификаций форматов файлов. Уведомьте тех, кто ведет соответствующие FAQ (графика, анимация, мультимедиа, аудио, медицина и т.д.), о существовании вашего формата и попросите их упомянуть об этом. Направьте свою документацию в фирмы, занимающиеся разработкой программ графики и формирования изображений, с тем чтобы обеспечить поддержку вашего формата и (или) программных продуктов.

На сегодняшний день наиболее качественно разработаны спецификации таких форматов, как TGA, TIFF, PNG, EPSF, PostScript.

Некоторые спецификации написаны хорошо, но содержат много лишней информации, что усложняет их структуру и делает чтение слишком утомительным занятием. К этой категории относятся большинство правительственных и военных форматов, а также форматы, созданные различными комитетами. (Например, CALS, NITF, NAPLPS, IGES, GKS, CGM.)

И, наконец, несколько слов о спецификациях таких форматов, как PCX, GIF, JFIF и Sun Raster: они точно попадают в категорию, определить которую можно фразой "Не дай Бог такое случится с вами".