Точка, точка, запятая - вышла рожица кривая
АрхивМного лет назад, когда IBM XT воспринималась в России как недоступное достижение Запада, а пределом мечтания компьютерных энтузиастов был ZX Spectrum, ко мне волей случая попал матричный принтер СМ-6329. Самодельный Spectrum хоть и имел интерфейс принтера, но печатать отказывался категорически: разработчики компьютера явно не рассчитывали на подобную технику.
Дело в том, что отличительной чертой принтера, изготовленного в одной из стран соцлагеря, была небольшая модернизация, соответствующая популярному тогда лозунгу об экономности экономики: печатающая головка, в отличие от взятого в качестве образца Epson, имела не девять игл, а семь. Две сэкономленные иглы стоили мне времени, потраченного на написание драйвера с длиннющей формулой вычисления адресов печатаемых точек, после чего под противное жужжание головки я гордораспечатывал копии экрана. На большее моего энтузиазма не хватило.То, что тогда представлялось далеким будущим, сегодня уже реализовано и имеет свое название: WYSIWYG (What You See Is What You Get), - "что видим, то и получим". Но от картинки на экране до ее копии на бумаге довольно длинная дистанция.
Практически все существующие сегодня принтеры относятся к так называемым растровым устройствам. Это означает, что вследствие особенностей конструкции или принципа действия печатающего механизма изображение формируется из последовательности точек. Казалось бы, все просто: изображение на экране компьютера также представляет собой набор пикселов. Достаточно описать атрибуты каждого пиксела и передать поток печатающему устройству.
Однакомаксимум, что можно нормально напечатать при таком подходе, это копию экрана, и то без изменения масштаба (не в линейных размерах, а в пикселах). Попробуйте изменить масштаб точечного изображения, к примеру, на 30 процентов. Если результирующее изображение также имеет точечный формат, то результат оставит желать... Чего? Правильно, другого способа описания графических объектов. Ведь пикселы - это не свойство самого изображения, а следствие технологии формирования изображения (не важно, на экране или на бумаге), которая не может обойтись без дискретизации и не может сделать эту дискретизацию произвольной, со сколь угодно малым шагом.
Программисты, по натуре своей сводящие все к максимальной степени абстракции, давно ввели понятие "объект". Понятием этим можно описать что угодно - нужно только знать присущие объекту свойства и дозволенные для него действия. Например, описание приведенного на рис. 1 графического объекта может быть выполнено двумя способами. При рассмотрении его в качестве векторного описание выглядит примерно так:
Type: Square;
Corners: (2,2), (5,5);
Color: Red=1, Green=0, Blue=0
При рассмотрении же изображения как растрового запись примет такой вид:
Pixel (2,2) Color: Red=1, Green=0, Blue=0;
Pixel (2,3) Color: Red=1, Green=0, Blue=0;
Pixel (2,4) Color: Red=1, Green=0, Blue=0;
Pixel (2,5) Color: Red=1, Green=0, Blue=0;
Pixel (3,2) Color: Red=1, Green=0, Blue=0;
Pixel (3,5) Color: Red=1, Green=0, Blue=0;
Pixel (4,2) Color: Red=1, Green=0, Blue=0;
Pixel (4,5) Color: Red=1, Green=0, Blue=0;
Pixel (5,2) Color: Red=1, Green=0, Blue=0;
Pixel (5,3) Color: Red=1, Green=0, Blue=0;
Pixel (5,4) Color: Red=1, Green=0, Blue=0;
Pixel (5,5) Color: Red=1, Green=0, Blue=0
Притом, что оба варианта описания позволяют восстановить исходное изображение, векторное значительно компактнее. Перечень геометрических объектов, которые можно описать первым способом, достаточно велик: это линии, дуги, окружности, эллипсы, прямоугольники, треугольники, кривые и прочие геометрические фигуры. Языки векторного описания позволяют использовать и растровые изображения, однако в этом случае, из-за сложности преобразования растровых объектов в векторные, применяется все же растровое описание.
Попробуем разобраться, что представляет собой типовой процесс прохождения и обработки данных от программного приложения до твердой копии. В случае с Windows этот процесс не зависит от того, какой тип языка описания изображения использует принтер (рис. 2). Приложение начинает процесс с описания изображения с помощью команд GDI (Graphics Device Interface). Интерфейс GDI является объектом Windows, и его задача - преобразовать поток команд GDI в поток команд DDI (Device Driver Interface), понятных драйверу устройства. Выполняя преобразование, интерфейс GDI обычно прибегает к спулингу (буферизации) данных в файл формата EMF (Enhanced Metafile) [1] с тем, чтобы процесс дальнейшего прохождения данных не зависел от скорости работы приложения. Задачей драйвера устройства является преобразование команд DDI в поток данных формата RAW, а собственно данные в этом потоке представляют собой команды языка, используемого конкретным принтером, - PostScript, PCL 3, PCL 5 и т. п.
Вот здесь-то и начинаются различия. В случае использования, например, языка PCL 3 в задачу драйвера входит растрирование изображения, а передаваемые принтеру данные представляют собой информацию о пикселах. При использовании же форматов PCL 5, PCL 6 или PostScript растрирование выполняется непосредственно печатающим устройством, а передаваемые принтеру данные представляют собой информацию о графических объектах (рис. 3).
Первый способ используется в устройствах построчной печати, которые обычно медленнее страничных принтеров. Учитывая также относительную дешевизну собственно печатных механизмов таких устройств (львиную долю стоимости которых составляет сменная печатающая головка), нерационально применять для растрирования отдельный процессор - достаточно драйвера принтера. Соответственно, по интерфейсу передаются данные, содержащие не описание объектов, а поток атрибутов пикселов. Разумеется, процесс растрирования нуждается в ресурсах - памяти и процессорном времени.
Когда растрирование выполняется драйвером, требуется некоторый объем свободной оперативной памяти, а иногда - дисковое пространство для размещения временных файлов. К примеру, драйверам струйных принтеров Hewlett-Packard нужно около 4 Мбайт оперативной памяти. Если же памяти не хватает, создаются временные файлы. При недостатке места на диске драйвер прекращает работу и выдает сообщение об ошибке. Буфер памяти самого принтера рассчитан максимально на одну строку изображения (один проход печатающей головки), а переполнению буфера препятствует приостановка процесса передачи данных по интерфейсу (в некоторых случаях можно обойтись без буфера вообще). В устройствах этого класса не предусмотрено наращивание памяти, да это и не имеет смысла: лучше побеспокоиться о том, чтобы хватало места на диске компьютера.
В случае, когда преобразование выполняется принтером, используется его собственная оперативная память. Такие устройства имеют растрирующий процессор (исключение составляют дешевые модели лазерных принтеров, предназначенные для работы только под Windows, - они пользуются ресурсами центрального процессора) и буфер памяти, достаточный для хранения полного изображения страницы в виде пикселов плюс некоторый запас, необходимый внутреннему процессору для выполнения преобразования. Объем требуемой памяти зависит от сложности изображения, и стандартного объема памяти хватает не всегда. В этом случае есть несколько вариантов поведения печатающего устройства. Чаще всего, принтер печатает все, что было в буфере, после чего "выбрасывает" недопечатанный лист. Некоторые новые модели могут замедлять процесс печати или уменьшать разрешение, хотя при этом отпечатанное изображение зачастую отличается от экранного. Впрочем, большинство принтеров описываемого типа допускают установку дополнительных модулей памяти. Соответственно, такие устройства рассчитаны на работу с одним из форматов языка описания страниц в виде объектов. Передача функций растрирования принтеру позволяет ускорить печать, разгрузив процессор компьютера, а применение в качестве растрирующего специализированных быстродействующих RISC-процессоров - выполнять печать с максимальной скоростью, на которую способен печатный механизм (подготовка растра очередной страницы осуществляется за время печати предыдущей). Разумеется, такая технология обходится потребителю дороже, но чего не сделаешь ради скорости!
К принтерам, использующим постраничный способ печати, относятся в основном лазерные и твердокрасочные, а построчный способ применяется во всех струйных, матричных принтерах и принтерах с термопереносом красителя.
Нельзя однозначно говорить о том, какой из способов преобразования и, соответственно, какой из языков описания страниц лучше. При использовании для выполнения преобразования драйвера многое зависит от мощности компьютера. Скорость преобразования, выполняемого принтером, напрямую зависит от мощности растрирующего процессора. На скорость печати в значительной степени может влиять и интерфейс, равно как и внутреннее программное обеспечение принтера. В сетевых конфигурациях существеннон влияние оказывает производительность принт-сервера.
Объем требуемой памяти, как уже говорилось, сильно зависит от печатаемого изображения. Интересно отметить, что при сравнении, к примеру, принтеров, использующих языки PCL 3 (описание на уровне пикселов) и PCL 5 (описание на уровне объектов), преимущество может иметь либо тот, либо другой способ, в зависимости от характера изображения. Объем файла спулинга в обоих случаях будет одинаков (на этом уровне изображение описывается устройство-независимым языком), а вот объем данных, передаваемых по интерфейсу (RAW), может различаться в несколько раз. При печати, например, текста или векторного изображения преимущество имеет PCL 5, так как этот язык позволяет описать геометрические объекты без разложения их на пикселы, а при печати растровых изображений (фотографии в том числе) применение PCL 5 себя не оправдывает, так как в этом случае изображение нельзя описать в векторном виде и преимущества языка не могут быть использованы. В то же время, применяемая в PCL компрессия эффективна именно для растровых изображений.
Если сравнивать два наиболее часто применяемых языка описания объектов - PostScript и PCL последних версий, следует отметить, что PostScript более ресурсоемок как в отношении памяти, так и процессорного времени, хотя во многих случаях обеспечивает большую точность передачи изображения при практически одинаковой функциональности.
Сам процесс преобразования векторного изображения в растровое остается за кадром - это know-how производителей, а по звучным названиям типа, например, PhotoRET II (Epson) догадаться об использованных алгоритмах не так-то просто. Да и нужно ли? Ведь в этой области компьютерной технологии сочетание стандартизации и возможностей для конкуренции между разработчиками все ближе подводит нас к тому, о чем мечталось несколько лет назад, - полному и бесповоротному WYSIWYG'у.
1 (обратно к тексту) - Формат файла спулинга можно обычно установить в драйвере принтера, при этом допускается либо EMF, либо RAW. Последний может занимать больше места, обеспечивая в некоторых случаях большую совместимость.