Поделиться через


Метод IPrintOemUni::FilterGraphics (prcomoem.h)

Метод IPrintOemUni::FilterGraphics можно использовать с принтерами, поддерживаемыми Unidrv, для изменения данных строки сканирования и их отправки в очередь очереди печати.

Синтаксис

HRESULT FilterGraphics(
  PDEVOBJ pdevobj,
  PBYTE   pBuf,
  DWORD   dwLen
);

Параметры

pdevobj

Предоставленный вызывающим объектом указатель на структуру DEVOBJ .

pBuf

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

dwLen

Значение, предоставленное вызывающим абонентом, представляющее длину (в байтах) данных, на которые указывает pBuf.

Возвращаемое значение

Метод должен возвращать одно из следующих значений:

Код возврата Описание
S_OK Операция успешно выполнена.
E_FAIL Сбой операции
E_NOTIMPL Метод не реализован.

Комментарии

Метод IPrintOemUni::FilterGraphics используется для изменения данных строки сканирования перед их отправкой в очередь печати. Метод отвечает за отправку получаемых данных в очередь очереди.

Метод IPrintOemUni::FilterGraphics является необязательным. Если подключаемый модуль отрисовки реализует этот метод, метод IPrintOemUni::GetImplementedMethod должен возвращать S_OK при получении в качестве входных данных FilterGraphics.

Если реализован метод IPrintOemUni::FilterGraphics , Unidrv не будет спуловать данные принтера. Вместо этого Unidrv вызывает этот метод каждый раз, когда буфер данных изображения готов к spooled.

Обратите внимание, что при реализации этого метода Unidrv также не сжимает данные принтера, как обычно. Если вы планируете использовать сжатие Unidrv, не следует реализовывать этот метод. Кроме того, следует изменить IPrintOemUni::GetImplementedMethod , чтобы он возвращал S_FALSE при передаче строки FilterGraphics.

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

Метод IPrintOemUni::FilterGraphics вызывается функцией DrvSendPage Unidrv. Если вы хотите реализовать IPrintOemUni::FilterGraphics, не следует полностью переопределять функции DrvSendPage или DrvNextBand в Unidrv.

Прежде чем функция DrvSendPage в Unidrv вызывает реализацию IPrintOemUni::FilterGraphics подключаемого модуля DrvSendPage.

  1. При необходимости транспонирует точечный рисунок, который должен быть отрисован.

  2. Преобразует проход вывода, состоящий из цветовых данных, в единый непрерывный массив данных.

  3. Обрабатывает группу строк сканирования и преобразует эти данные в команды для принтера.

  4. Задает положение X/Y и передает линию графических данных принтеру.

Если подключаемый модуль реализовал IPrintOemUni::FilterGraphics, Unidrv вызовет подключаемый модуль с данными строки сканирования, а не отправит его на принтер.

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

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

При реализации метода IPrintOemUni::FilterGraphics в подключаемом модуле он будет использоваться для отправки растровых данных непосредственно на принтер. Число строк сканирования в блоке задается с помощью атрибута PinsPerPhysPass , связанного с функцией Разрешения . Этот атрибут является необязательным. Если он не указан, ему присваивается значение 1 (как и для большинства струйных и страничных принтеров). В противном случае Значение PinsPerPhysPass должно быть кратным 8. В IPrintOemUni::FilterGraphics параметр pBuf указывает на буфер, содержащий растровые данные строки сканирования, которые будут обрабатываться при необходимости (например, для сжатия) и, наконец, отправляться. Параметр dwLen — это длина буфера, на который указывает pBuf .

В следующем списке описано несколько распространенных сценариев реализации IPrintOemUni::FilterGraphics:

  • Специальные методы сжатия

  • Битовая обработка входящих растровых данных перед их отправкой на принтер

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

Метод IPrintOemUni::FilterGraphics предоставляет доступ к данным строки сканирования и возможность последующей обработки растровых данных.

Количество строк сканирования равно высоте изображения. Например, толщина 1 бита на пиксель (bpp) каждой линии сканирования равна ширине 1 пикселя, поэтому количество линий сканирования равно высоте изображения.

Дополнительные сведения о настройке операций отрисовки Unidrv см. в разделе Настроенная отрисовка Unidrv.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть prcomoem.h (включая Prcomoem.h)

См. также раздел

DrvNextBand

DrvSendPage

DrvWriteSpoolBuf

IPrintOemDriverUni::D rvWriteSpoolBuf

IPrintOemUni

IPrintOemUni::GetImplementedMethod

OEMFilterGraphics