Метод IPrintOemUni::FilterGraphics (prcomoem.h)
Метод IPrintOemUni::FilterGraphics можно использовать с принтерами, поддерживаемыми Unidrv, для изменения данных строки сканирования и отправки его в spooler.
Синтаксис
HRESULT FilterGraphics(
PDEVOBJ pdevobj,
PBYTE pBuf,
DWORD dwLen
);
Параметры
pdevobj
Указатель на структуру DEVOBJ вызываемого абонента.
pBuf
Указатель, предоставленный вызывающим объектом, на буфер, содержащий данные строки сканирования для печати.
dwLen
Вызываемое значение, представляющее длину в байтах данных, на которые указывает pBuf.
Возвращаемое значение
Метод должен возвращать одно из следующих значений:
Возвращаемый код | Описание |
---|---|
S_OK | Операция завершилась успешно. |
E_FAIL | Сбой операции |
E_NOTIMPL | Метод не реализован. |
Замечания
Метод IPrintOemUni::FilterGraphics используется для изменения данных строки сканирования перед отправкой в средство spooler печати. Метод отвечает за отправку данных, получаемых в spooler.
Метод IPrintOemUni::FilterGraphics необязателен. Если подключаемый модуль отрисовки реализует этот метод, подключаемый модуль IPrintOemUni::GetImplementedMethod должен возвращать S_OK при получении "FilterGraphics" в качестве входных данных.
Если реализован метод IPrintOemUni::FilterGraphics, Unidrv не выполняет данные принтера. Вместо этого Unidrv вызывает этот метод каждый раз, когда буфер данных изображения готов к сплочению.
Обратите внимание, что при реализации этого метода Unidrv также не сжимает данные принтера, как обычно. Если вы планируете использовать сжатие Unidrv, не следует реализовать этот метод. Кроме того, необходимо изменить IPrintOemUni::GetImplementedMethod, чтобы он возвращал S_FALSE при передаче строки FilterGraphics.
Метод может выполнять окончательную послеобработку данных изображения, например удаление смежных точек или любую другую операцию фильтрации потока данных, которую Не предоставляет Unidrv. Затем он должен спулить данные, вызвав метод IPrintOemDriverUni::D rvWriteSpoolBuf.
метод IPrintOemUni::FilterGraphics вызывается функцией DrvSendP age Unidrv. Если вы хотите реализовать IPrintOemUni::FilterGraphics, необходимо не полностью переопределить функции DrvSendP age DrvSendPage или функции DrvNextBand.
Перед drvSendPage функции Unidrv вызывает реализацию подключаемых модулей IPrintOemUni::FilterGraphics, DrvSendPage.
При необходимости транспонирует отрисовку растрового изображения.
Преобразует выходной проход, состоящий из цветовых данных, в один непрерывный массив данных.
Обрабатывает группу строк сканирования и преобразует эти данные в команды принтера.
Задает положение X/Y и передает строку графических данных принтеру.
Если подключаемый модуль реализовал IPrintOemUni::FilterGraphics, Unidrv вызовет подключаемый модуль с данными строки сканирования вместо отправки его на принтер.
Метод IPrintOemUni::FilterGraphics позволяет подключаемый модуль отрисовки изменять данные строки сканирования и отправлять его в spooler. Если вы реализуете эту функцию, Unidrv не будет spool ваши данные. Вместо этого 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-Specific настраиваемыхотрисовки.
Требования
Требование | Ценность |
---|---|
целевая платформа | Настольный |
заголовка | prcomoem.h (include Prcomoem.h) |
См. также
IPrintOemDriverUni::D rvWriteSpoolBuf