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


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

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

Синтаксис

HRESULT Compression(
        PDEVOBJ pdevobj,
        PBYTE   pInBuf,
        PBYTE   pOutBuf,
        DWORD   dwInLen,
        DWORD   dwOutLen,
  [out] OUT INT *piResult
);

Параметры

pdevobj

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

pInBuf

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

pOutBuf

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

dwInLen

Длина входных данных, предоставляемая вызывающим абонентом.

dwOutLen

Длина выходного буфера, предоставляемая вызывающим объектом.

[out] piResult

Получает значение результата, предоставленное методом. Если операция выполнена успешно, это значение должно быть числом сжатых байтов, которое не должно быть больше значения, полученного для dwOutLen. Если возникает ошибка или если методу не удается выполнить сжатие, результат должен иметь значение -1.

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

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

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

Комментарии

Метод IPrintOemUni::Compression используется для отрисовки подключаемых модулей для сжатия данных строки сканирования перед их отправкой в очередь печати. Цель метода — обеспечить поддержку методов сжатия для принтеров, которые не поддерживаются Unidrv.

IPrintOemUni::Compression Если метод определен и если GPD-файл принтера содержит запись команды CmdEnableOEMComp, Unidrv вызывает метод каждый раз, когда строка сканирования готова к отправке в очередь печати печати. (Сведения о команде CmdEnableOEMComp см. в разделе Команды сжатия растровых данных.)

Значения параметров pInBuf и dwInLen описывают буфер, содержащий строку сканирования данных изображения для сжатия. Значения параметров pOutBuf и dwOutLen описывают буфер, в который IPrintOemUni::Compression метод должен поместить сжатые данные.

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

Поэтому метод вызывается для каждой строки сканирования независимо от того, IPrintOemUni::Compression используются ли сжатые данные, возвращаемые методом, на самом деле. При вызове метода dwOutLen содержит длину, возвращаемую методом наилучшего сжатия, который unidrv пытался до этого. (Если другие методы не были опробованы, dwOutLen содержит несжатую длину.) Если алгоритм не может создать сжатую строку сканирования, которая равна или короче байтов dwOutLen , он должен возвращать значение -1 в расположении, указанном параметром piResult.

Если после того, как Unidrv попытается использовать все включенные методы сжатия, сжатые данные, возвращаемые методом IPrintOemUni::Compression , имеют наименьшую длину, Unidrv отправляет буфер в диспетчер очереди печати печати, которому предшествует команда, указанная в записи команды CmdEnableOEMComp.

Если возможно, алгоритм сжатия метода должен использовать полученное значение dwOutLen , чтобы определить, может ли он остановить алгоритм до завершения, чтобы сэкономить время, если другой метод сжатия уже создал лучший результат.

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

Требования

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