Метод 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.
Возвращаемое значение
Метод должен возвращать одно из следующих значений.
Код возврата | Описание |
---|---|
|
Операция успешно выполнена. |
|
Сбой операции |
|
Метод не реализован. |
Комментарии
Метод 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) |