Поддержка псевдовекторной графики
Внимание
Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.
Дополнительные сведения см. в статье "Современная платформа печати" и руководство по проектированию приложений поддержки печати.
Устройства, не поддерживающие векторную графику, могут воспользоваться поддержкой, которую Unidrv предоставляет для псевдовекторной графики. При использовании этой функции Unidrv скачивает твердые черные прямоугольники и горизонтальные и вертикальные линии непосредственно на невекторное графическое устройство, уменьшая затраты на отрисовку этих цифр на растровой поверхности. Это также уменьшает размер выходных данных, что может повысить пропускную способность принтера для устройств, которые не обрабатывают растровые данные эффективно.
Чтобы воспользоваться этой функцией, мини-driver для невекторного графического устройства требуется только для поддержки команды CmdRectBlackFill. Эта функция отключена при отключении функции оптимизации печати на вкладке "Дополнительно " страниц свойств принтера.
Функция графики псевдовектора перехватывает вызовы DrvBitBlt, DrvStrokePath и DrvLineTo, чтобы определить, должен ли быть нарисован твердый черный прямоугольник или вертикальная или горизонтальная линия. Когда Unidrv распознает рисунок, который должен быть нарисован как допустимый прямоугольник (тот, который является твердым черным, не имеет сложного вырезки и не использует ROP с использованием текущих бит назначения), он хранится в прямоугольнике массива вместо рисования на поверхности.
Самый сложный аспект функции псевдовекторной графики заключается в том, чтобы избежать проблем z-порядка, вызванных объектами, которые должны быть нарисованы поверх ранее нарисованных объектов. Объекты сверху могут потребоваться удалить или перезаписать часть черного прямоугольника. Если черный прямоугольник уже скачан на устройство, объект, нарисованный позже на системной поверхности, может быть неправильно нарисован.
Решение этой проблемы заключается в временном хранении допустимого прямоугольника, а не сразу на поверхности. Когда новый объект должен быть нарисован на поверхности, Unidrv проверяет, перекрывается ли объект любым черным прямоугольником. В этом случае перекрывающаяся часть черного прямоугольника сначала рисуется на поверхности, прежде чем новый объект нарисован, тем самым сохраняя правильное упорядочение z. Рисование прямоугольника сначала учитывает возможность того, что новый объект может быть связан с ним, включая объект, взаимодействующий с назначением.
Кроме того, возможно, что новый объект, нарисованный, содержит сложные вырезки, чтобы результирующий рисунок больше не был прямоугольником. Когда полоса или отрисовка страниц завершена, все остальные черные прямоугольники можно загрузить непосредственно на устройство, не вызывая проблем с z-order. Unidrv поддерживает список до 256 прямоугольников на каждую полосу, сцепляя прямоугольники BitBlt по возможности.
Проблемы с графикой псевдовектора
Функция графики псевдовектора может изменить порядок z в определенных ситуациях, особенно если текст скачан непосредственно на устройство и последующие объекты с сложным вырезкой должны взаимодействовать с этим текстом.