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

El IPrintOemUni::ImageProcessing método se puede usar con impresoras compatibles con Unidrv para modificar los datos de mapa de bits de imagen, con el fin de realizar el formato de color o el mediotonamiento. El método puede devolver el mapa de bits modificado a Unidrv o enviarlo directamente al administrador de trabajos de impresión.

Sintaxis

HRESULT ImageProcessing(
        PDEVOBJ           pdevobj,
        PBYTE             pSrcBitmap,
        PBITMAPINFOHEADER pBitmapInfoHeader,
        PBYTE             pColorTable,
        DWORD             dwCallbackID,
        PIPPARAMS         pIPParams,
  [out] OUT PBYTE         *ppbResult
);

Parámetros

pdevobj

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

pSrcBitmap

Puntero proporcionado por el autor de la llamada a una DIB de entrada.

pBitmapInfoHeader

Puntero proporcionado por el autor de la llamada a una estructura BITMAPINFOHEADER que describe el mapa de bits al que apunta pSrcBitmap. La estructura BITMAPINFOHEADER se describe en la documentación de Microsoft Windows SDK.

pColorTable

Puntero proporcionado por el autor de la llamada a una tabla de colores. Este parámetro solo se usa si el formato de salida es de ocho bits por píxel. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

Al interpretar un mapa de bits, debe examinar la tabla de colores. Unidrv puede modificar los colores en un mapa de bits, pero también realizará los ajustes correspondientes en la tabla de colores, lo que no dará lugar a ningún cambio neto. Sin embargo, si omite los cambios en la tabla de colores y examina solo el mapa de bits, es posible que una imagen no se imprima correctamente. Para obtener un ejemplo, vea la explicación del parámetro pPaletteEntry en HT_Get8BPPMaskPalette.

dwCallbackID

Valor proporcionado por el autor de la llamada asignado al atributo *IPCallbackID de la opción seleccionada actualmente para la característica ColorMode. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

pIPParams

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

[out] ppbResult

Puntero a una ubicación de memoria que contiene la dirección de un búfer. El contenido del búfer depende de dónde se debe enviar la DIB convertida.

Si este método pretende devolver el DIB convertido a Unidrv y se realiza correctamente en la conversión, debe establecer *ppbResult en la dirección del búfer que contiene la DIB convertida y debe devolver S_OK. Si se produce un error en la conversión, el método debe establecer *ppbResult en NULL y debe devolver E_FAIL.

Si este método pretende enviar la DIB convertida al administrador de trabajos de cola y se realiza correctamente en la conversión, el método debe establecer *ppbResult enTRUE y debe devolver S_OK. Si se produce un error en la conversión, el método debe establecer *ppbResult en FALSE y debe devolver E_FAIL. Para obtener más información, vea la explicación de los atributos *DevBPP y *DevNumOfPlanes en la sección Comentarios.

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 está implementado.
 

Características del mapa de bits de origen

Características del mapa de bits de destino

Comentarios

El IPrintOemUni::ImageProcessing método se usa para modificar los mapas de bits de imagen antes de enviarlos al administrador de trabajos de impresión. Su propósito es proporcionar compatibilidad personalizada con los modos de color y los métodos de halftoning no admitidos por Unidrv. Un controlador de impresora que envía un mapa de bits al administrador de trabajos de impresión (en lugar de enviarlo a Unidrv) debe establecer los atributos *DevBPP y *DevNumOfPlanes en cero en el archivo GPD de la impresora.

Si se implementa el método y si la entrada del archivo GPD para el formato de color actual contiene un atributo *IPCallbackID , Unidrv llama al método cada vez que hay disponible un mapa de bits. La llamada se realiza después de que GDI represente el mapa de bits, que luego se envía al administrador de colas. (Para obtener información sobre el atributo *IPCallbackID , vea Atributos de opción para la característica ColorMode).

Si el modo de color actual, tal y como especifica dwCallbackID, es el que admite Unidrv, el IPrintOemUni::ImageProcessing método debe realizar operaciones de halftoning en el mapa de bits recibido y devolverlo a Unidrv para la cola. Si el modo de color actual es aquel que Unidrv no admite, el método debe realizar operaciones de halftoning y, a continuación, colar el mapa de bits.

Si el método realiza solo operaciones de mediotonamiento, debe hacer lo siguiente:

  • Realice operaciones de halftoning en los datos, como se indica en el miembro pHalftoneOption de la estructura IPPARAMS .
  • Devuelve los datos de imagen modificados a Unidrv colocándolo en un búfer y proporcionando la dirección del búfer como valor devuelto del método. El búfer devuelto puede ser el al que apunta pSrcBitmap o puede ser uno asignado localmente.
Para obtener más información sobre cómo personalizar las operaciones de mediotonamiento en Unidrv, vea Customd Halftoning.

Para controlar el formato de color personalizado, el IPrintOemUni::ImageProcessing método debe hacer lo siguiente:

  • Convierta los datos DIB, descritos por los valores del parámetro pSrcBitmap y pBitmapInfoHeader , en el formato de color indicado por dwCallbackID.
  • Realice operaciones de halftoning en los datos, como se indica en el miembro pHalftoneOption de la estructura IPPARAMS .
  • Envíe los datos al administrador de trabajos de impresión llamando al método IPrintOemDriverUni::D rvWriteSpoolBuf .
  • Modifique la posición del cursor de la impresora realizando llamadas adecuadas a los métodos IPrintOemDriverUni::D rvXMoveTo e IPrintOemDriverUni::D rvYMoveTo .
Para obtener más información sobre cómo personalizar las operaciones de formato de color en Unidrv, vea Formatos de color personalizados.

El parámetro dwCallbackID indica el tipo de formato de color, si existe, que se debe realizar. Dentro del archivo GPD de la impresora, cada entrada *Opción para la característica ColorMode describe un formato de color. Si el formato requiere el procesamiento por el IPrintOemUni::ImageProcessing método , su entrada *Option debe contener un atributo *IPCallbackID . Cuando Unidrv llama al IPrintOemUni::ImageProcessing método , proporciona el valor de atributo asociado a la opción seleccionada actualmente para la característica ColorMode. Este valor es el valor del parámetro dwCallbackID .

Tanto si el IPrintOemUni::ImageProcessing método realiza operaciones de formato de color como datos de imagen en cola, o simplemente realiza operaciones de semitonización y devuelve mapas de bits procesados a Unidrv, debe exportar un método IPrintOemUni::MemoryUsage si asigna cantidades significativas de memoria para mapas de bits de destino u otros fines. De lo contrario, el rendimiento del sistema podría degradarse.

Si se implementa el método , se llama a para cada región ráster de la página. Sin embargo, si una región está en blanco, el miembro bBlankBand de la estructura IPPARAMS se establece en TRUE, lo que indica que el bloque está en blanco y los datos no son válidos. Dado que una banda se puede dividir en bloques alternativos de regiones en blanco y no en blanco para optimizar el rendimiento, el tamaño del bloque no siempre se corresponde con el tamaño de banda.

El mapa de bits de origen descrito por pSrcBitmap y pBitmapInfoHeader tiene las siguientes características:

  • El contenido de DIB está ordenado y sin comprimir.
  • El formato de datos es uno que aparece en Control de formatos de color.
  • Si el formato requiere una tabla de colores, pColorTable apunta a la tabla.
  • Los datos de color están en PRIMARY_ORDER_CBA formato, como se explica en la descripción del miembro ulPrimaryOrder de la estructura GDIINFO . En otras palabras, si el formato de color es RGB o CMY, los n bits menos significativos deben contener el valor azul o amarillo, los siguientes n bits deben contener el valor verde o magenta, y los n bits siguientes deben contener el valor rojo o cian. Los bits sin usar están en la posición más significativa. Si el formato usa 4 bits por píxel, n es 1. Para 24 bits por píxel, n es 8, como se muestra en la ilustración siguiente. Para CYMK, el cuarto grupo de n bits contiene negro.

formato de PRIMARY_ORDER_CBA
En la ilustración anterior se muestran los datos de color en formato de PRIMARY_ORDER_CBA para dos píxeles, con 24 bits de datos de color por píxel. Pasar de direcciones de memoria baja a direcciones de memoria alta, hay ocho bits de datos azules, después ocho bits de datos verdes y, a continuación, ocho bits de datos rojos, después de lo cual el patrón se repite. Esto también se conoce como orden de salida del dispositivo BGR.
Para las operaciones de semitonización, en las que se devuelve un mapa de bits procesado a Unidrv, el mapa de bits devuelto debe tener las siguientes características:
  • El contenido de DIB debe estar ordenado y sin comprimir.
  • El formato de datos debe ser aquel que aparece en Control de formatos de color y debe ser compatible con los atributos *DevBPP y *DevNumOfPlanes del formato de color identificado por dwCallbackID. (Para obtener información sobre estos atributos, vea Atributos de opción para la característica ColorMode).
  • Si el formato requiere una tabla de colores, se debe crear la tabla y se debe devolver su dirección en pColorTable.
  • Los datos de color deben devolverse en formato PRIMARY_ORDER_CBA, como se describe para el mapa de bits de origen.
  • La estructura BITMAPINFOHEADER especificada por pBitmapInfoHeader debe describir los mapas de bits de entrada y salida. El IPrintOemUni::ImageProcessing método no debe cambiar el contenido de la estructura.
El IPrintOemUni::ImageProcessing método es opcional. Si un complemento de representación implementa este método, el método IPrintOemUni::GetImplementedMethod del complemento debe devolver S_OK cuando recibe "ImageProcessing" como entrada.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado prcomoem.h (include Prcomoem.h)

Consulte también

HT_Get8BPPMaskPalette

IPrintOemUni

IPrintOemUni::FilterGraphics