Метод 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
используется подключаемыми модулями отрисовки для сжатия данных строки сканирования перед отправкой в средство 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) |