Infraestructura de análisis previo
Importante
La plataforma de impresión moderna es el medio preferido de Windows para comunicarse con impresoras. Se recomienda usar el controlador de clase de bandeja de entrada IPP de Microsoft, junto con aplicaciones de soporte técnico de impresión (PSA), para personalizar la experiencia de impresión en Windows 10 y 11 para el desarrollo de dispositivos de impresora.
Para obtener más información, consulte Plataforma de impresión moderna y la Guía de diseño de aplicaciones para compatibilidad con impresión.
La infraestructura de análisis previo es un mecanismo por el que Unidrv fuerza las bandas en un trabajo de impresión para que la primera reproducción de bandas de cada página sea una banda que contenga toda la página. La pasada de análisis previo no permite ninguna representación y solo se realiza para habilitar el análisis de los objetos de la página antes de que se representen los objetos.
Para permitir un análisis previo de página completa, Unidrv especifica primero una superficie de dispositivo de página completa dentro de la función DrvEnableSurface y, a continuación, indica que la primera banda es el tamaño de toda la página mediante DrvQueryPerBandInfo. Una vez completado el análisis previo, Unidrv usa DrvQueryPerBandInfo para restaurar la región de recorte a su tamaño antes de habilitar el análisis previo; Unidrv se representa posteriormente en esa superficie. Debido a las limitaciones de implementación de GDI, el análisis previo solo se puede habilitar cuando el modo N-up es ONE_UP, o si la banda de representación es toda la página.
En el pseudocódigo siguiente se muestra la lógica que se usa para el análisis previo.
DrvEnableSurface
if( preanalysis enabled )
Use dummy device surface
DrvStartDoc
For each physical page
{
DrvStartPage
DrvStartBanding
For each banding surface
{
DrvQueryPerBandInfo
// Set sizlBand member of PERBANDINFO
if( preanalysis_pass )
pbi.sizlBand = {whole page}
else
pbi.sizlBand = {normal band}
Carry out rendering operations
if ( ( preanalysis pass && OEM preanalysis enabled ) || !preanalysis_pass ) {
Call OEM hooks
DrvNextBand
}
if ( ( preanalysis pass && OEM preanalysis enabled ) || !preanalysis_pass )
Call OEMNextBand
if( preanalysis pass ) {
Disable preanalysis
Switch from dummy device surface to real device surface
}
if( last band )
Write end page character from GPD
} // for each banding surface
} // for each physical page
DrvEndDoc
Dado que la funcionalidad de análisis previo debe funcionar con archivos y complementos de descripción de impresora genérica (GPD) actuales, el orden z de texto, la detección de bandas en blanco y otras operaciones se implementan de forma invisible desde la perspectiva del minicontrolador. Un minicontrolador puede enlazar DrvStartBanding y DrvNextBand, pero no recibirá la primera llamada a DrvNextBand porque la primera llamada a DrvNextBand no incluye ninguna representación. El complemento recibe la primera llamada a DrvNextBand solo si establece la marca en el GPD que habilita el análisis previo de nivel de objeto OEM (*PreAnalysisOptions: 8). En este caso, el complemento debe enlazar DrvStartBanding y DrvNextBand, y el complemento debe comprobar el parámetro pptl de la función DrvStartBanding . Si el parámetro pptl no es NULL, el análisis previo está deshabilitado. Si el parámetro pptl es NULL, indica el inicio de la pasada de análisis previo. En este caso, el complemento debe suponer que todas las llamadas a las DDI de dibujo que el complemento ha vinculado resultan de la pasada del análisis previo. La pasada de análisis previo finaliza con la primera llamada a la función DrvNextBand y las pasadas de representación empiezan tras la primera llamada a la función DrvNextBand. Las llamadas posteriores a esta función contendrán datos de representación.
Modos de *PreAnalysisOptions
El modo de análisis previo se controla en el archivo GPD mediante el nombre de atributo y atributo de *PreAnalysisOptions: n. En la tabla siguiente se enumeran los valores de parámetro que se pueden usar con el nombre de atributo *PreAnalysisOptions. Se pueden combinar dos o más de estos valores para habilitar varias opciones.
Valor de significado del parámetro 0
Deshabilitar todos los modos de análisis previo.
1
modo predeterminado. Activar el análisis de texto monocromo de orden z y la optimización de la banda en blanco. Este modo está habilitado para dispositivos con una fuente descargable o compatibilidad con fuentes de dispositivo y alta resolución (600 ppp o superior), modos de representación de 24 bpp.
2
Habilitar la optimización de 1 BPP para las devoluciones de llamada IPrintOemUni ImageProcessing de 24 BPP.
4
Habilitar las operaciones StretchBlt del dispositivo.
8
Habilitar el análisis previo del nivel de objeto de OEM.
Análisis de texto monocromo de orden Z con optimización de banda en blanco
*PreAnalysisOptions: 1
Establecer el parámetro *PreAnalysisOptions en 1 permite a Unidrv realizar las siguientes operaciones:
Detectar problemas en orden z entre los objetos de texto y gráfico en impresoras monocromo.
Realizar la optimización de banda en blanco.
La primera operación controla los problemas de orden z que surgen cuando el texto que se descarga en una impresora monocromo se sobrescribe posteriormente o interactúa con objetos gráficos. Los problemas de orden Z suelen deberse a objetos gráficos que contienen recortes complejos para que Unidrv no pueda descargar un rectángulo blanco que borre el texto descargado previamente.
Unidrv realiza una pasada de análisis previo en cada página antes de llevar a cabo un pasada de representación. Unidrv hace esto para determinar si cualquier texto se superpone con un objeto de transferencia de bloques de bits (blt) que usa un recorte complejo que no se puede simular. Por lo tanto, el texto se representa en el mapa de bits de superficie en lugar de descargarse directamente para que los objetos representados más adelante interactúen correctamente con el texto.
Además, para los dispositivos que no admiten rectángulos blancos, Unidrv comprueba si hay texto superpuesto por blts, incluso cuando no contienen recortes complejos. Unidrv representa el texto en la superficie en lugar de descargarlo directamente en la impresora.
Los siguientes comandos de dibujo se prueban con texto que podrían ser superpuestos por los siguientes blts:
Por lo tanto, este modo debe corregir todos los problemas de orden z entre los objetos de texto y regiones rellenadas. Tenga en cuenta que puede seguir habiendo problemas con el texto y las líneas superpuestas. Estas situaciones no se incluyen porque esta solución puede dar lugar a que casi todo el texto se descargue en lugar de dibujarse.
Esta funcionalidad no corrige los problemas de orden z asociados al uso de fuentes del dispositivo. Si la aplicación o el controlador han seleccionado el modo de fuente del dispositivo, el controlador no puede corregir este problema y no podrá representar fuentes del dispositivo en la superficie.
La segunda operación permite a Unidrv optimizar las regiones en blanco de la página. En este modo, Unidrv omite los márgenes superior e inferior vacíos, así como cualquier región en blanco grande en medio de la página. Este modo, que está pensado para su uso en la impresión a color, mejora el rendimiento al minimizar el número de pasadas de banda necesarias para representar la página.
Durante el paso de análisis previo, Unidrv determina dónde se producirá el dibujo en la página. La optimización de bandas en blanco está habilitada cada vez que se habilita el análisis previo o cuando la impresora usa 24 bandas de representación BPP en alta resolución (600 ppp o superior). Esto debería dar lugar a una mejora notable del rendimiento en la representación de 24 BPP para impresoras ink jet y no requiere ningún cambio en los complementos OEM existentes.
Optimización de bandas negras
*PreAnalysisOptions: 2 *% 1 bpp ImageProcessing bitmaps
Establecer el parámetro *PreAnalysisOptions en 2 permite a Unidrv usar una superficie de banda de 1 BPP más grande para representar regiones que solo contienen objetos negros sólidos, en lugar de representar toda la página en 24 BPP. Este modo es similar a la optimización de bandas en blanco, con la excepción de que también determina regiones negras sólidas (en lugar de regiones de color) en la página. Solo los objetos que son negros sólidos (sin tonos grises) se pueden representar en la superficie de bandas de 1 BPP porque el tono medio configurado para el color BPP 24 no se representa correctamente en monocromo de 1 BPP.
Unidrv crea dos superficies dentro de la función DrvEnableSurface: una para color y la otra para monocromo de 1 BPP. Unidrv usa la misma memoria para cada una, por lo que no se requiere memoria adicional. El análisis previo de la página determina si la página contiene regiones en negro sólido o blanco, para las que se pueden usar bandas más grandes que para las regiones que contienen colores. Solo las regiones de color requieren el uso de la superficie de banda de color más pequeña.
Con la misma cantidad de memoria, una superficie monocromo de 1 BPP puede ser 24 veces mayor que una superficie de color de 24 BPP. Por lo tanto, una imagen que contiene color solo en el centro de la página se puede dividir en tres regiones: la región superior, la región que contiene el color y la región inferior. Estas tres regiones se pueden agrupar de la siguiente manera: la región superior se puede colocar en una sola banda monocromática, la región que contiene color se puede dividir en tantas bandas de color como sea necesario para cubrirla, y la región inferior se puede colocar en una sola banda monocromática.
Esta funcionalidad requiere que los OEM admitan la devolución de llamada IPrintOemUni ImageProcessing y para controlar el volcado de datos de trama. La compatibilidad actual del complemento OEM con la devolución de llamada IPrintOemUni ImageProcessing debe mejorarse para aceptar bandas de 24 BPP o bandas en negro sólido de 1 BPP.
Compatibilidad con operaciones StretchBlt de dispositivos
*PreAnalysisOptions: 4
Establecer el parámetro *PreAnalysisOptions en 4 permite a Unidrv descargar llamadas DrvStretchBlt directamente en dispositivos que admiten operaciones stretchblt.
Cuando Unidrv genera datos de color de 24 BPP, todas las imágenes stretchblt se extienden a la resolución del dispositivo, lo que da como resultado grandes cantidades de datos ráster que se deben descargar. Esto puede dar lugar a un rendimiento lento, además de condiciones fuera de memoria en muchas impresoras del Este de Asia.
Se requiere un complemento de representación de minicontrolador para aprovechar el modo stretchblt porque debe enlazar OEMStretchBlt y proporcionar sus propios comandos de descarga de imágenes. Unidrv permite el enlace OEMStretchBlt solo en llamadas que se pueden descargar directamente. Por lo tanto, el complemento no es responsable de controlar los problemas de orden z. El complemento solo necesita descargar directamente los datos de la imagen de origen contenidos en las llamadas OEMStretchBlt que recibe. El complemento también tiene la opción de volver a poner la imagen en Unidrv si la imagen tiene un formato que el complemento no admite o no puede descargar.
Cada vez que los objetos se descargan directamente en un dispositivo mientras se representan otros datos en el sistema, puede haber problemas de orden z o incoherencias de semitono. Este modo usa el análisis previo para determinar qué stretchblts se pueden descargar directamente. Solo los stretchblts que no contengan máscara ni recorte complejo se considerarán para descarga directa. Si un objeto posterior superpone cualquiera de los stretchblts que se están considerando para la descarga directa, no se descargará directamente ningún objeto. Este principio debe mejorar el rendimiento y garantizar que ninguna imagen incluya semitono del sistema y del dispositivo, lo que da como resultado una salida de impresión de mala calidad.
Enlaces de análisis previo de nivel de objeto OEM
*PreAnalysisOptions: 8
Establecer el parámetro *PreAnalysisOptions en 8 permite al OEM iniciar un pasada de análisis previo para que todos los objetos de toda la página se reproduzcan después de la llamada a DrvStartBanding sin tener en cuenta el tamaño de banda. No se permite ningún dibujo en Unidrv durante la pasada de análisis previo, pero los OEM pueden enlazar todas las llamadas de dibujo DrvXxx para analizar los objetos de la página.
La funcionalidad de este modo se centra en impresoras ink jet a color para que los OEM puedan usar la corrección o representación de colores basada en objetos. Por ejemplo, ciertas impresoras deben controlar objetos negros de forma diferente si se intersecan con objetos de color, en lugar de objetos negros que aparecen por sí solos. Es posible que otros OEM quieran un semitono para los objetos stretchblt que son diferentes de los objetos bitblt. Los objetos Stretchblt pueden estar en cualquier formato de archivo gráfico compatible con Windows, como .png o .jpg. Los objetos Bitblt son exclusivamente mapas de bits.
Cuando este modo está habilitado en el GPD, Unidrv define la superficie como una superficie de bandas, pero hace que la primera reproducción sea de toda la página. Para ello, Unidrv establece la ventana de recorte de GDI en toda la página. Unidrv permite enlazar todos los comandos de dibujo, pero vuelve antes de que se pueda realizar cualquier dibujo. En las pasadas siguientes, Unidrv restablece la ventana del recorte al tamaño de banda y las bandas normales como de costumbre.
Es necesario que los OEM enlacen DrvStartBanding y DrvNextBand cuando hayan habilitado este modo en el GPD. Deben probar el parámetro pptl de la función DrvStartBanding para determinar si Unidrv puede habilitar el análisis previo en este modo en la página especificada. Si el parámetro pptl es NULL, Unidrv ha habilitado el análisis previo. Unidrv usa el parámetro pptl porque no tiene ningún significado en este momento (no se ha actualizado con la posición de banda). Para el análisis previo, la posición de la banda siempre se establece en (0, 0)). Si el parámetro pptl es NULL, el OEM debe considerar todas las llamadas de dibujo antes que la primera DrvNextBand forme parte del análisis previo y no debe permitir ningún dibujo en la superficie.
El final del análisis previo se señala mediante una llamada a la función OEMNextBand. El parámetro pptl que se pasa a OEMNextBand no es NULL. Esta llamada solo se usa para devolver el valor pptl adecuado a Unidrv. Los complementos pueden establecer el valor pptl en sí mismos o pueden volver a llamar a Unidrv (como el ejemplo de pseudocódigo anterior al principio de este artículo). Dado que la superficie de bandas que el parámetro pso de OEMNextBand especificó en la primera llamada a OEMNextBand aún no se ha representado, un complemento no debe enviar su contenido al dispositivo.