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


Метод 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 используется подключаемыми модулями отрисовки для сжатия данных строки сканирования перед отправкой в средство spooler печати. Цель метода — обеспечить поддержку методов сжатия для конкретного принтера, которые не поддерживаются Unidrv.

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

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

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

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

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

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

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

Требования

Требование Ценность
целевая платформа Настольный
заголовка prcomoem.h (include Prcomoem.h)