DrawPicture


Членство

PRINTJOB

Синтаксис

PROCEDURE DrawPicture(X, Y, Width, Height: FLOAT;
                      Picture: OBJECT;
                      [ SrcRectHm: IRECT ]);

Описание

Метод печатает изображение, заданное ссылкой Picture на объект IPicture, либо часть этого изображения, выделенную прямоугольником SrcRectHm. Разрешены изображения любого типа (растр, иконка, метафайл, расширенный метафайл). Координаты X и Y, заданные в миллиметрах, указывают расположение точки привязки изображения на странице относительно левого и верхнего полей страницы, параметры Width и Height, заданные в миллиметрах, определяют соответственно ширину и высоту прямоугольника, в который будет масштабировано изображение. Если часть изображения попадает на поля страницы, она будет отсечена. В случае неудачи метод выбросит исключение.

Некоторые драйверы принтеров имеют проблемы с наложением прозрачных растров и иконок. Возможных причин две: либо драйвер не поддерживает возможность считывания растра из формируемой страницы (флаг DI_BITMAP в листинге утилиты wPrnTest), либо имеет ошибку в реализации. В первом случае фон будет белым, а не прозрачным, во втором - поведение не определено. Во всяком случае на PDF-принтеры "Jaws PDF Creator" и "Acrobat Distiller" внимания обращать не стоит.

Прямоугольник SrcRectHm задается в системе координат HIMETRIC, в которой единица измерения - сотая доля логического миллиметра, ось абсцисс направлена слева направо, а ось ординат - снизу вверх, а не сверху вниз, как в случае с выходным прямоугольником. Для перевода из пикселов в HIMETRIC и обратно можно воспользоваться процедурами PIXELSTOHIMETRIC и HIMETRICTOPXELS. Точка с координатами (SrcRectHm.Left, SrcRectHm.Bottom) определяет опорный угол прямоугольника; ширина прямоугольника составит SrcRectHm.Right-SrcRectHm.Left сотых логического миллиметра, а высота - SrcRectHm.Top-SrcRectHm.Bottom (из-за направления оси ординат), т.е. точки с абсциссами SrcRectHm.Right и точки с ординатами SrcRectHm.Top в прямоугольник не попадают. Максимальный допустимый прямоугольник определяется координатами [0, Picture.Height, Picture.Width, 0]. Пусть, например, изображение имеет размеры 8000*6000 сотых логического миллиметра. Если мы хотим отсечь по 100 сотых с каждого края изображения, следует задать прямоугольник [100, 5900, 7900, 100]. Обратите внимание, ордината SrcRectHm.Top имеет большее значение, чем SrcRectHm.Bottom, потому что ось ординат в системе координат HIMETRIC направлена снизу вверх.

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

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

Исполнение данного метода на терминальном клиенте имеет ряд особенностей. Аппаратно-зависимый растр, хранимый объектом IPicture, для передачи на терминальный клиент преобразуется в аппаратно-независимый. Во-первых, для предотвращения ошибок преобразования и снижения нагрузки на сеть аппаратно-зависимые растры, превышающие 800*600*24 бит, преобразуются с понижением глубины цветовой таблицы до 256 цветов. Во-вторых, объект IPicture не позволяет узнать, какой цвет в прозрачном изображении считается прозрачным, а как следствие, прозрачные изображения отображаются как непрозрачные. Рекомендуется по возможности использовать метод PRINTJOB.LoadAndDrawPicture, который передает по сети исходный графический файл, а не результат преобразования, поэтому свободен от упомянутых недостатков.

См. также