Compartir a través de


Método IPrintOemUni::Compression (prcomoem.h)

El método IPrintOemUni::Compression se puede usar con impresoras compatibles con Unidrv para proporcionar un método de compresión de mapa de bits personalizado.

Sintaxis

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

Parámetros

pdevobj

Puntero proporcionado por el autor de la llamada a una estructura DEVOBJ.

pInBuf

Puntero proporcionado por el autor de la llamada a los datos de la línea de examen de entrada.

pOutBuf

Puntero proporcionado por el autor de la llamada a un búfer de salida para recibir datos comprimidos de línea de examen.

dwInLen

Longitud proporcionada por el autor de la llamada de los datos de entrada.

dwOutLen

Longitud proporcionada por el autor de la llamada del búfer de salida.

[out] piResult

Recibe un valor de resultado proporcionado por el método. Si la operación se realiza correctamente, este valor debe ser el número de bytes comprimidos, que no debe ser mayor que el valor recibido para dwOutLen. Si se produce un error o si el método no se puede comprimir, el valor del resultado debe ser -1.

Valor devuelto

El método debe devolver uno de los valores siguientes.

Código devuelto Descripción
S_OK
La operación se realizó correctamente.
E_FAIL
Error en la operación
E_NOTIMPL
El método no se implementa.

Observaciones

El método IPrintOemUni::Compression se usa mediante la representación de complementos para comprimir los datos de la línea de examen antes de enviarlos al administrador de trabajos de impresión. El propósito del método es proporcionar compatibilidad con métodos de compresión específicos de la impresora que no son compatibles con Unidrv.

Si se define el método IPrintOemUni::Compression y si el archivo de GPD de la impresora contiene una entrada de comando CmdEnableOEMComp, Unidrv llama al método cada vez que una línea de examen está lista para enviarse al cola de impresión. (Para obtener información sobre el comando CmdEnableOEMComp, consulte Comandos de compresión de datos de ráster).

Los valores de parámetro pInBuf y dwInLen describen un búfer que contiene una línea de examen de los datos de imagen que se van a comprimir. Los valores de parámetro pOutBuf y dwOutLen describen el búfer en el que el método IPrintOemUni::Compression debe colocar los datos comprimidos.

Antes de que Unidrv envíe una línea de examen al administrador de trabajos de impresión, intenta cada método de compresión habilitado para determinar cuál crea el flujo de datos más pequeño. Después de determinar el mejor algoritmo de compresión (comprimiendo los datos mediante cada método), pone en cola el comando de impresora que permite a la impresora aceptar el mejor formato comprimido y, a continuación, envía los datos comprimidos a la impresora.

Por lo tanto, se llama al método IPrintOemUni::Compression para cada línea de examen, tanto si se usan o no los datos comprimidos devueltos por el método. Cuando se llama al método , dwOutLen contiene la longitud devuelta por el mejor método de compresión Unidrv ha intentado hasta entonces. (Si no se ha probado ningún otro método, dwOutLen contiene la longitud sin comprimir). Si el algoritmo no puede generar una línea de examen comprimida igual o inferior a dwOutLen bytes, debe devolver -1 en la ubicación especificada por piResult.

Si, después de que Unidrv intente todos los métodos de compresión habilitados, los datos comprimidos devueltos por IPrintOemUni::Compression tienen la longitud más pequeña, Unidrv envía el búfer a la cola de impresión, precedido por el comando especificado por la entrada del comando CmdEnableOEMComp.

Si es posible, el algoritmo de compresión del método debe usar el valor de dwOutLen recibido para determinar si puede detener el algoritmo antes de la finalización, para ahorrar tiempo si otro método de compresión ya ha creado un mejor resultado.

El método IPrintOemUni::Compression es opcional. Si un complemento de representación implementa este método, el método IPrintOemUni::GetImplementedMethod debe devolver S_OK cuando recibe "Compression" como entrada.

Requisitos

Requisito Valor
de la plataforma de destino de Escritorio
encabezado de prcomoem.h (include Prcomoem.h)