Condividi tramite


Metodo IPrintOemUni::FilterGraphics (prcomoem.h)

Il metodo IPrintOemUni::FilterGraphics può essere usato con le stampanti supportate da Unidrv per modificare i dati della riga di analisi e inviarli allo spooler.

Sintassi

HRESULT FilterGraphics(
  PDEVOBJ pdevobj,
  PBYTE   pBuf,
  DWORD   dwLen
);

Parametri

pdevobj

Puntatore fornito dal chiamante a una struttura DEVOBJ .

pBuf

Puntatore fornito dal chiamante a un buffer contenente i dati della riga di analisi da stampare.

dwLen

Valore fornito dal chiamante che rappresenta la lunghezza, in byte, dei dati a cui punta pBuf.

Valore restituito

Il metodo deve restituire uno dei valori seguenti:

Codice restituito Descrizione
S_OK Operazione completata.
E_FAIL Operazione non riuscita
E_NOTIMPL Il metodo non è implementato.

Commenti

Il metodo IPrintOemUni::FilterGraphics viene usato per modificare i dati della riga di analisi prima che vengano inviati allo spooler di stampa. Il metodo è responsabile dell'invio dei dati ricevuti allo spooler.

Il metodo IPrintOemUni::FilterGraphics è facoltativo. Se un plug-in per il rendering implementa questo metodo, il metodo IPrintOemUni::GetImplementedMethod del plug-in deve restituire S_OK quando riceve "FilterGraphics" come input.

Se viene implementato il metodo IPrintOemUni::FilterGraphics , Unidrv non esegue lo spooling dei dati della stampante. Unidrv chiama invece questo metodo ogni volta che un buffer di dati dell'immagine è pronto per lo spooling.

Si noti che quando questo metodo viene implementato, Unidrv non comprime anche i dati della stampante, come accade normalmente. Se si intende usare la compressione Unidrv, non è consigliabile implementare questo metodo. Inoltre, è necessario modificare IPrintOemUni::GetImplementedMethod in modo che restituisca S_FALSE quando viene passata la stringa "FilterGraphics".

Il metodo può eseguire la post-elaborazione finale dei dati dell'immagine, ad esempio la rimozione di punti adiacenti o qualsiasi altra operazione di filtro del flusso di dati non specificata da Unidrv. Deve quindi eseguire lo spooling dei dati chiamando il metodo IPrintOemDriverUni::D rvWriteSpoolBuf .

Il metodo IPrintOemUni::FilterGraphics viene chiamato dalla funzione DrvSendPage di Unidrv. Se si vuole implementare le funzioni IPrintOemUni::FilterGraphics, non è necessario eseguire completamente l'override delle funzioni DrvSendPage o DrvNextBand di Unidrv.

Prima della funzione DrvSendPage di Unidrv chiama l'implementazione IPrintOemUni::FilterGraphics del plug-in DrvSendPage.

  1. Se necessario, trasporrà la bitmap di cui eseguire il rendering.

  2. Trasforma un passaggio di output costituito da dati a colori in una singola matrice contigua di dati.

  3. Elabora un gruppo di righe di analisi e trasforma questi dati in comandi per la stampante.

  4. Imposta la posizione X/Y e passa la linea di dati grafici alla stampante.

Se il plug-in ha implementato IPrintOemUni::FilterGraphics, Unidrv chiamerà il plug-in con i dati della riga di analisi anziché inviarli alla stampante.

Il metodo IPrintOemUni::FilterGraphics consente a un plug-in di rendering di modificare i dati della riga di analisi e inviarli allo spooler. Se si implementa questa funzione, Unidrv non eseguirà lo spooling dei dati. IPrintOemUni::FilterGraphics verrà invece chiamato ogni volta che un buffer di dati è pronto per essere spoolato e inviato alla stampante.

È possibile usare IPrintOemUni::FilterGraphics per implementare un metodo di compressione speciale o per eseguire la manipolazione dei bit nel flusso di dati inviato alla stampante o a entrambi. In qualsiasi situazione, il codice di compressione predefinito del driver non viene usato. IPrintOemUni::FilterGraphics viene presentato con un blocco di dati ed è necessario per restituire questi dati usando la funzione DrvWriteSpoolBuf . Il driver principale (Unidrv) non eseguirà ulteriori elaborazioni dei dati raster dopo aver chiamato OEMFilterGraphics.

Quando si implementa il metodo IPrintOemUni::FilterGraphics nel plug-in, verrà usato per inviare i dati raster direttamente alla stampante. Il numero di righe di analisi in un blocco viene specificato tramite l'attributo PinsPerPhysPass associato alla funzionalità risoluzione Questo attributo è facoltativo e, se non lo si specifica, è impostato su 1 ,ad esempio per la maggior parte delle stampanti inkjet e di pagina. In caso contrario, PinsPerPhysPass deve essere un multiplo di 8. In IPrintOemUni::FilterGraphics il parametro pBuf punta al buffer che contiene i dati raster della riga di analisi che verranno modificati, ad esempio per la compressione, e infine inviati. Il parametro dwLen è la lunghezza del buffer a cui punta pBuf .

L'elenco seguente descrive diversi scenari comuni per l'implementazione di IPrintOemUni::FilterGraphics:

  • Tecniche di compressione speciali

  • Manipolazione dei bit dei dati raster in ingresso prima di inviarli alla stampante

IPrintOemUni::FilterGraphics invia infine tutti i dati alla stampante usando la funzione DrvWriteSpoolBuf . Il driver principale (Unidrv) non esegue altre elaborazioni sui dati inviati da IPrintOemUni::FilterGraphics . Se il plug-in esegue una compressione o una manipolazione di bit speciale, il plug-in deve allocare i buffer necessari per la compressione speciale o la manipolazione dei bit. Se il plug-in non alloca i propri buffer e se i dati compressi sono inferiori all'origine, l'output sovrascriverà il buffer di origine.

Il metodo IPrintOemUni::FilterGraphics consente di accedere ai dati della riga di analisi stessa e consente di post-elaborare i dati raster.

Il numero di righe di analisi è uguale all'altezza dell'immagine. Ad esempio, uno spessore a 1 bit per pixel (bpp) di ogni riga di analisi è uguale alla larghezza di 1 pixel, quindi il numero di linee di analisi è uguale all'altezza dell'immagine.

Per altre informazioni sulla personalizzazione delle operazioni di rendering di Unidrv, vedere Rendering personalizzato specifico di Unidrv.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione prcomoem.h (include Prcomoem.h)

Vedi anche

DrvNextBand

DrvSendPage

DrvWriteSpoolBuf

IPrintOemDriverUni::D rvWriteSpoolBuf

IPrintOemUni

IPrintOemUni::GetImplementedMethod

OEMFilterGraphics