Condividi tramite


Infrastruttura di preanlisi

Importante

È consigliabile usare il driver di classe IPP di Microsoft, insieme a Print Support Apps (PSA), per personalizzare l'esperienza di stampa in Windows 10 e 11 per lo sviluppo di dispositivi stampanti.

Per altre informazioni, vedere la guida alla progettazione dell'app di supporto stampa.

L'infrastruttura di preanlisi è un meccanismo in base al quale Unidrv forza il banding su un processo di stampa in modo che la prima riproduzione band di ogni pagina sia una band che contiene l'intera pagina. Il passaggio di preanalisi non consente alcun rendering e viene eseguito solo per abilitare l'analisi degli oggetti nella pagina prima del rendering degli oggetti.

Per consentire una preanalisi a pagina intera, Unidrv specifica prima una superficie del dispositivo a pagina intera all'interno della funzione DrvEnableSurface e quindi indica che la prima banda è la dimensione dell'intera pagina tramite DrvQueryPerBandInfo. Dopo il completamento della preanalisi, Unidrv usa DrvQueryPerBandInfo per ripristinare la dimensione dell'area di ritaglio prima dell'abilitazione della preanlisi; Unidrv esegue successivamente il rendering in tale superficie. A causa delle limitazioni di implementazione di GDI, la preanalisi può essere abilitata solo quando la modalità N è ONE_UP o se la banda di rendering è l'intera pagina.

Il codice pseudocodice seguente illustra la logica usata per la preanalisi.

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

Poiché la funzionalità di preanlisi deve funzionare con i file e i plug-in (GPD) generici correnti, il rilevamento della banda vuota e altre operazioni vengono implementate invisibly dal punto di vista del minidriver. Un minidriver può collegare DrvStartBanding e DrvNextBand, ma non riceverà la prima chiamata a DrvNextBand perché la prima chiamata a DrvNextBand non include alcun rendering. Il plug-in riceve la prima chiamata DrvNextBand solo se imposta il flag nell'oggetto Criteri di gruppo che abilita la preanlisi a livello di oggetto OEM (*PreAnalysisOptions: 8). In questo caso, il plug-in deve associare DrvStartBanding e DrvNextBand e il plug-in deve controllare il parametro pptl della funzione DrvStartBanding. Se il parametro pptl non è NULL, la preanlisi è disabilitata. Se il parametro pptl è NULL, che indica l'inizio del passaggio di preanlisi. In questo caso, il plug-in deve presupporre che tutte le chiamate a disegno DDIs che il plug-in ha ottenuto risultato dal passaggio di preanalisi. Il passaggio di preanalisi termina con la prima chiamata alla funzione DrvNextBand e il rendering inizia dopo la prima chiamata alla funzione DrvNextBand . Le chiamate successive a questa funzione conterranno i dati di rendering.

*Modalità PreAnalysisOptions

La modalità di preanlisi è controllata nel file GPD dal parametro *PreAnalysisOptions: n nome attributo e parametro attributo. Nella tabella seguente sono elencati i valori dei parametri che possono essere usati con il nome dell'attributo *PreAnalysisOptions . Due o più di questi valori possono essere combinati per abilitare più opzioni.

Parametro Che significa valore 0

Disabilitare tutte le modalità di preanlisi.

1

Modalità predefinita. Abilitare l'analisi del testo in ordine z monocromatico e l'ottimizzazione della banda vuota. Questa modalità è abilitata per i dispositivi con il supporto del tipo di carattere scaricabile o del tipo di carattere del dispositivo e la risoluzione elevata (600 dpi o versioni successive), 24 modalità di rendering BPP.

2

Abilitare 1 ottimizzazione BPP per 24 callback IPrintOemUni ImageProcessing BPP.

4

Abilitare le operazioni StretchBlt del dispositivo.

8

Abilitare la preanalisi a livello di oggetto OEM.

Analisi del testo in ordine Z monocromatico con ottimizzazione banda vuota

*PreAnalysisOptions: 1

L'impostazione del parametro *PreAnalysisOptions su 1 consente a Unidrv di eseguire le operazioni seguenti:

  • Rilevare i problemi nell'ordine z tra testo e oggetti grafici nelle stampanti monocromatica.

  • Eseguire l'ottimizzazione della banda vuota.

La prima operazione gestisce i problemi di ordine z che si verificano quando il testo scaricato in una stampante monocromatica viene sovrascritto o in caso contrario interagisce con oggetti grafici. I problemi di ordine Z sono spesso causati da oggetti grafici che contengono clip complesse in modo che Unidrv non sia in grado di scaricare un rettangolo bianco che cancella il testo scaricato in precedenza.

Unidrv esegue un passaggio di preanlisi su ogni pagina prima di eseguire un passaggio di rendering. Unidrv esegue questa operazione per determinare se qualsiasi testo sarà sovrascritto con un oggetto blt (bit-block transfer) che usa una clip complessa che non può essere simulata. Pertanto, il testo viene eseguito il rendering nella bitmap della superficie anziché essere scaricato direttamente in modo che gli oggetti sottoposti a rendering in un secondo momento interagiscono correttamente con il testo.

Inoltre, per i dispositivi che non supportano rettangoli bianchi, Unidrv controlla la presenza di qualsiasi overlaid di testo da blts, anche quando non contengono clip complesse. Unidrv esegue il rendering del testo sulla superficie anziché scaricarlo direttamente nella stampante.

I comandi di disegno seguenti vengono testati sul testo che potrebbero essere sovralitti da blts successivi:

Questa modalità, pertanto, deve correggere tutti i problemi di ordine z tra oggetti testo e area riempita. Si noti che possono verificarsi problemi con il testo e le righe sovralaid. Queste situazioni non sono incluse perché tale soluzione può comportare quasi tutto il testo scaricato anziché essere disegnato.

Questa funzionalità non corregge i problemi di ordine z associati all'uso dei tipi di carattere del dispositivo. Se l'applicazione o il driver ha selezionato la modalità carattere del dispositivo, il driver non può correggere questo problema e non sarà in grado di eseguire il rendering dei tipi di carattere del dispositivo sulla superficie.

La seconda operazione consente a Unidrv di ottimizzare le aree vuote nella pagina. In questa modalità, Unidrv ignora i margini in alto e inferiore vuoti vuoti, oltre a qualsiasi area vuota di grandi dimensioni nella parte centrale della pagina. Questa modalità, che è destinata all'uso nella stampa a colori, migliora le prestazioni riducendo al minimo il numero di passaggi band necessari per eseguire il rendering della pagina.

Durante il passaggio di preanalisi, Unidrv determina dove si verificherà il disegno nella pagina. L'ottimizzazione della banda vuota viene abilitata ogni volta che la preanalisi è abilitata o quando la stampante usa 24 bande di rendering BPP a risoluzione elevata (600 dpi o superiore). Ciò dovrebbe comportare un notevole aumento delle prestazioni su 24 rendering BPP per stampanti jet penna e non richiede modifiche ai plug-in OEM esistenti.

Ottimizzazione banda nera

*PreAnalysisOptions: 2  *% 1 bpp ImageProcessing bitmaps

L'impostazione del parametro *PreAnalysisOptions su 2 consente a Unidrv di usare una superficie di banda BPP più grande per eseguire il rendering di aree contenenti solo oggetti neri solidi, anziché eseguire il rendering dell'intera pagina a 24 BPP. Questa modalità è simile all'ottimizzazione banda vuota, con l'eccezione che determina anche aree nere solide (anziché aree di colore) nella pagina. È possibile eseguire il rendering solo degli oggetti che sono nero a tinta unita (nessuna sfumatura grigia) nell'area di banda BPP 1, perché il colore halftone impostato per 24 colori BPP non viene eseguito correttamente in 1 monocromia BPP.

Unidrv crea due superfici all'interno della funzione DrvEnableSurface : una per il colore e l'altra per 1 monocromia BPP. Unidrv usa la stessa memoria per ogni oggetto, quindi non è necessaria alcuna memoria aggiuntiva. La preanalisi della pagina determina se la pagina contiene aree nere o vuote solide, per cui è possibile usare bande più grandi rispetto alle aree che contengono colori. Solo le aree di colore richiedono l'uso della superficie di colore più piccola.

Usando la stessa quantità di memoria, una superficie monocromatica BPP può essere 24 volte maggiore di una superficie di colore BPP 24. Pertanto, un'immagine contenente il colore solo al centro della pagina può essere divisa in tre aree: l'area superiore, l'area contenente il colore e l'area inferiore. Queste tre aree possono essere raggruppate come segue: l'area superiore può essere posizionata in una singola banda monocromatica, l'area contenente il colore può essere divisa in tutte le bande di colori necessarie per coprirla e l'area inferiore può essere posizionata in una singola banda monocromatica.

Questa funzionalità richiede agli OEMS di supportare il callback IPrintOemUni ImageProcessing e gestire il dump dei dati raster. Il supporto del plug-in OEM corrente per il callback di IPrintOemUni ImageProcessing deve essere migliorato per accettare 24 bande BPP o 1 BPP solid black band.

Supporto per le operazioni StretchBlt del dispositivo

*PreAnalysisOptions: 4

L'impostazione del parametro *PreAnalysisOptions su 4 consente a Unidrv di scaricare chiamate DrvStretchBlt direttamente ai dispositivi che supportano operazioni stretchblt.

Quando Unidrv genera 24 dati di colore BPP, tutte le immagini stretchblt vengono estese alla risoluzione del dispositivo, che comporta grandi quantità di dati raster che devono essere scaricati. Ciò può comportare prestazioni lente, oltre alle condizioni di memoria insufficiente in molte stampanti asiatiche orientali.

Un plug-in di rendering di minidriver è necessario per sfruttare la modalità stretchblt perché deve associare OEMStretchBlt e fornire i comandi di download delle immagini. Unidrv consente l'hook OEMStretchBlt solo sulle chiamate che possono essere scaricate direttamente. Pertanto, il plug-in non è responsabile della gestione dei problemi di z-order. Il plug-in deve scaricare direttamente i dati dell'immagine di origine contenuti nelle chiamate OEMStretchBlt ricevute. Il plug-in ha anche l'opzione di puntare l'immagine in Unidrv se l'immagine è in un formato che il plug-in non supporta o non può scaricare.

Ogni volta che gli oggetti vengono scaricati direttamente in un dispositivo mentre altri dati vengono visualizzati nel sistema, possono verificarsi problemi di z-order o inconsistenze di metàtone. Questa modalità usa la preanalisi per determinare quali stretchblts possono essere scaricati direttamente. Verranno considerati solo stretchblts che non contengono alcuna maschera o ritaglio complesso per il download diretto. Se un oggetto successivo sovrappone uno degli stretchblts considerati per il download diretto, non verranno scaricati direttamente oggetti. Questo principio dovrebbe migliorare le prestazioni e dovrebbe garantire che nessuna immagine includa la metà del sistema e dal dispositivo, che comporta un output di stampa di qualità scarsa.

Hook di preanlisi OEM Object-Level

*PreAnalysisOptions: 8

L'impostazione del parametro *PreAnalysisOptions su 8 consente all'OEM di avviare un passaggio di preanalisi in modo che tutti gli oggetti dell'intera pagina vengano riprodotti dopo la chiamata DrvStartBanding senza considerare le dimensioni della banda. Nessun disegno è consentito all'interno di Unidrv durante il passaggio di preanlisi, ma le macchine virtuali possono associare tutte le chiamate di disegno DrvXxx per analizzare gli oggetti nella pagina.

La funzionalità in questa modalità è concentrata sulle stampanti jet penna a colori in modo che gli OEMS possano usare correzione o rendering basati su oggetti. Ad esempio, alcune stampanti devono gestire oggetti neri in modo diverso se si intersecano con oggetti colore, anziché oggetti neri che appaiono da soli. Altre macchine virtuali potrebbero volere un mezzotone per gli oggetti stretchblt diversi da oggetti bitblt. Gli oggetti Stretchblt possono essere in qualsiasi formato di file grafico supportato da Windows, ad esempio .png o .jpg. Gli oggetti Bitblt sono esclusivamente bitmap.

Quando questa modalità è abilitata nell'oggetto Criteri di gruppo, Unidrv definisce la superficie come superficie di banding, ma fa sì che la prima riproduzione sia dell'intera pagina. A tale scopo, Unidrv imposta la finestra clip GDI sull'intera pagina. Unidrv consente l'aggancio di tutti i comandi di disegno, ma restituisce prima di poter eseguire qualsiasi disegno. Nel passaggio seguente, Unidrv reimposta la finestra di clip alla normale dimensione della banda e delle bande come di consueto.

Le macchine virtuali sono necessarie per collegare sia DrvStartBanding che DrvNextBand quando hanno abilitato questa modalità nell'oggetto Criteri di gruppo. Devono testare il parametro pptl della funzione DrvStartBanding per determinare se Unidrv può abilitare la preanlisi in questa modalità nella pagina specificata. Se il parametro pptl è NULL, Unidrv ha abilitato la preanlisi. Unidrv usa il parametro pptl perché non ha alcun significato a questo punto (non è stato aggiornato con la posizione della banda). Per la preanalisi, la posizione della banda è sempre impostata su (0, 0)). Se il parametro pptl è NULL, l'OEM deve considerare tutte le chiamate di disegno prima del primo DrvNextBand per essere parte della preanalisi e non deve consentire alcun disegno sulla superficie.

La fine della preanalisi viene segnalata da una chiamata alla funzione OEMNextBand . Il parametro pptl passato a OEMNextBand non è NULL. Questa chiamata viene usata solo per restituire il valore pptl appropriato a Unidrv. I plug-in possono impostare il valore pptl stesso o possono tornare a Unidrv (come l'esempio pseudococo precedente all'inizio di questo articolo). Poiché la superficie di banding specificata dal parametro pso di OEMNextBand nella prima chiamata a OEMNextBand non ha ancora eseguito il rendering, un plug-in non deve inviare il relativo contenuto al dispositivo.