Metodo IPrintOemUni::ImageProcessing (prcomoem.h)
Il metodo IPrintOemUni::ImageProcessing
può essere usato con stampanti unidrv supportate per modificare i dati bitmap dell'immagine, per eseguire la formattazione dei colori o la metàtoning. Il metodo può restituire la bitmap modificata a Unidrv o inviarla direttamente allo spooler di stampa.
Sintassi
HRESULT ImageProcessing(
PDEVOBJ pdevobj,
PBYTE pSrcBitmap,
PBITMAPINFOHEADER pBitmapInfoHeader,
PBYTE pColorTable,
DWORD dwCallbackID,
PIPPARAMS pIPParams,
[out] OUT PBYTE *ppbResult
);
Parametri
pdevobj
Puntatore fornito dal chiamante a una struttura DEVOBJ.
pSrcBitmap
Puntatore fornito dal chiamante a un input DIB.
pBitmapInfoHeader
Puntatore fornito dal chiamante a una struttura BITMAPINFOHEADER che descrive la bitmap a cui punta pSrcBitmap. La struttura BITMAPINFOHEADER è descritta nella documentazione di Microsoft Windows SDK.
pColorTable
Puntatore fornito dal chiamante a una tabella colori. Questo parametro viene usato solo se il formato di output è di otto bit per pixel. Per altre informazioni, vedere la sezione Osservazioni seguente.
Quando si interpreta una bitmap, è necessario esaminare la tabella dei colori. Unidrv può modificare i colori in una bitmap, ma apporta anche modifiche corrispondenti nella tabella dei colori, senza apportare modifiche nette. Tuttavia, se si ignorano le modifiche apportate alla tabella dei colori ed esaminate solo la bitmap, un'immagine potrebbe non essere stampata correttamente. Per un esempio, vedere la discussione del parametro pPaletteEntry in HT_Get8BPPMaskPalette.
dwCallbackID
Valore fornito dal chiamante assegnato all'attributo *IPCallbackID dell'opzione attualmente selezionata per la funzionalità ColorMode. Per altre informazioni, vedere la sezione Osservazioni seguente.
pIPParams
Puntatore fornito dal chiamante a una struttura di IPPARAMS.
[out] ppbResult
Puntatore a una posizione di memoria che contiene l'indirizzo di un buffer. Il contenuto del buffer dipende dalla posizione in cui deve essere inviato il DIB convertito.
Se questo metodo intende inviare di nuovo il DIB convertito a Unidrv e ha esito positivo nella conversione, deve impostare *ppbResult all'indirizzo del buffer contenente il DIB convertito e deve restituire S_OK. Se la conversione non riesce, il metodo deve impostare *ppbResult su NULL e deve restituire E_FAIL.
Se questo metodo intende inviare il DIB convertito allo spooler e ha esito positivo nella conversione, il metodo deve impostare *ppbResult a TRUEe deve restituire S_OK. Se la conversione non riesce, il metodo deve impostare *ppbResult su FALSE e deve restituire E_FAIL. Per altre informazioni, vedere la discussione sugli attributi DevBPP e *DevNumOfPlanes nella sezione Osservazioni.
Valore restituito
Il metodo deve restituire uno dei valori seguenti.
Codice restituito | Descrizione |
---|---|
|
Operazione riuscita. |
|
Operazione non riuscita. |
|
Il metodo non è implementato. |
Caratteristiche bitmap di origine
Caratteristiche bitmap di destinazione
Osservazioni
Il metodo IPrintOemUni::ImageProcessing
viene usato per modificare le bitmap di immagine prima che vengano inviate allo spooler di stampa. Lo scopo è fornire supporto personalizzato per le modalità colore e i metodi di halftoning non supportati da Unidrv. Un driver della stampante che invia una bitmap allo spooler di stampa (anziché inviarlo a Unidrv) deve impostare gli attributi *DevBPP e *DevNumOfPlanes su zero nel file GPD della stampante.
Se il metodo viene implementato e se la voce del file GPD per il formato di colore corrente contiene un attributo *IPCallbackID, Unidrv chiama il metodo ogni volta che è disponibile una bitmap. La chiamata viene eseguita dopo che GDI esegue il rendering della bitmap, che viene quindi inviata allo spooler. Per informazioni sull'attributoIPCallbackID, vedere attributi di opzione per la funzionalità ColorMode.
Se la modalità colore corrente, come specificato da dwCallbackID, è quella supportata da Unidrv, il metodo IPrintOemUni::ImageProcessing
deve eseguire operazioni di halftoning sulla bitmap ricevuta e restituirlo a Unidrv per lo spooling. Se la modalità colore corrente è quella non supportata da Unidrv, il metodo deve eseguire operazioni di halftoning e quindi eseguire lo spooling della bitmap.
Se il metodo esegue solo operazioni di halftoning, deve eseguire le operazioni seguenti:
- Eseguire operazioni di halftoning sui dati, come indicato dal membro pHalftoneOption della struttura IPPARAMS.
- Restituisce i dati dell'immagine modificati in Unidrv inserendoli in un buffer e specificando l'indirizzo del buffer come valore restituito del metodo. Il buffer restituito può essere quello a cui punta pSrcBitmapoppure può essere uno allocato localmente.
Per gestire la formattazione dei colori personalizzata, il metodo IPrintOemUni::ImageProcessing
deve eseguire le operazioni seguenti:
- Convertire i dati DIB, descritti dal pSrcBitmap e pBitmapInfoHeader valori dei parametri, nel formato di colore indicato da dwCallbackID.
- Eseguire operazioni di halftoning sui dati, come indicato dal membro pHalftoneOption della struttura IPPARAMS.
- Inviare i dati allo spooler di stampa chiamando il metodo IPrintOemDriverUni::D rvWriteSpoolBuf.
- Modificare la posizione del cursore della stampante effettuando chiamate appropriate ai metodi IPrintOemDriverUni::D rvXMoveTo e IPrintOemDriverUni::D rvYMoveTo.
Il parametro dwCallbackID indica il tipo di formattazione del colore, se presente, che deve essere eseguito. All'interno del file GPD della stampante, ogni voce *Opzione per la funzionalità ColorMode descrive un formato di colore. Se il formato richiede l'elaborazione dal metodo IPrintOemUni::ImageProcessing
, la voce *Option deve contenere un attributo *IPCallbackID. Quando Unidrv chiama il metodo IPrintOemUni::ImageProcessing
, fornisce il valore dell'attributo associato all'opzione attualmente selezionata per la funzionalità ColorMode. Questo valore è il valore del parametro dwCallbackID.
Indipendentemente dal fatto che il metodo IPrintOemUni::ImageProcessing
stia eseguendo operazioni di formattazione dei colori e di spooling dei dati dell'immagine o semplicemente eseguendo operazioni di halftoning e restituendo bitmap elaborate in Unidrv, deve esportare un metodo IPrintOemUni::MemoryUsage se alloca quantità significative di memoria per bitmap di destinazione o altri scopi. In caso contrario, le prestazioni del sistema potrebbero essere ridotte.
Se il metodo viene implementato, viene chiamato per ogni area raster nella pagina. Tuttavia, se un'area è vuota, il membro bBlankBand della struttura IPPARAMS è impostato su TRUE, che indica che il blocco è vuoto e i dati non sono validi. Poiché una banda può essere suddivisa in blocchi alternati di aree vuote e non vuote per ottimizzare le prestazioni, le dimensioni del blocco non corrispondono sempre alle dimensioni della banda.
La bitmap di origine descritta da pSrcBitmap e pBitmapInfoHeader presenta le caratteristiche seguenti:
- Il contenuto DIB è ordinato dall'alto verso il basso e non compresso.
- Il formato dei dati è quello elencato in Gestione dei formati di colore.
- Se il formato richiede una tabella colori, la tabella punta a pColorTable.
- I dati colore sono in formato PRIMARY_ORDER_CBA, come illustrato nella descrizione del membro ulPrimaryOrder della struttura GDIINFO. In altre parole, se il formato di colore è RGB o CMY, i bit meno significativi n devono contenere il valore blu o giallo, il successivo n bit deve contenere il valore verde o magenta e il successivo n bit deve contenere il valore rosso o ciano. I bit inutilizzati si trovano nella posizione più significativa. Se il formato usa 4 bit per pixel, n è 1. Per 24 bit per pixel, n è 8, come illustrato nella figura seguente. Per CMYK, il quarto gruppo di n bit contiene il nero.

La figura precedente illustra i dati di colore in formato PRIMARY_ORDER_CBA per due pixel, con 24 bit di dati colore per pixel. Passando da indirizzi di memoria insufficiente a indirizzi di memoria elevata, sono presenti otto bit di dati blu, quindi otto bit di dati verdi e quindi otto bit di dati rossi, dopo il quale il modello si ripete. Questo è noto anche come ordine di output del dispositivo BGR.
Per le operazioni di halftoning, in cui viene restituita una bitmap elaborata a Unidrv, la bitmap restituita deve avere le caratteristiche seguenti:
- Il contenuto DIB deve essere ordinato dall'alto verso il basso e non compresso.
- Il formato dei dati deve essere uno elencato in Gestione formati colorie deve essere compatibile con il* DevBPP e *DevNumOfPlanes attributi del formato di colore identificato da dwCallbackID. Per informazioni su questi attributi, vedere attributi di opzione per la funzionalità ColorMode.)
- Se il formato richiede una tabella colori, è necessario creare la tabella e restituirne l'indirizzo in pColorTable.
- I dati colore devono essere restituiti in formato PRIMARY_ORDER_CBA, come descritto per la bitmap di origine.
-
La struttura BITMAPINFOHEADER specificata da pBitmapInfoHeader deve descrivere sia le bitmap di input che di output. Il metodo
IPrintOemUni::ImageProcessing
non deve modificare il contenuto della struttura.
IPrintOemUni::ImageProcessing
è facoltativo. Se un plug-in di rendering implementa questo metodo, il metodo IPrintOemUni::GetImplementedMethod deve restituire S_OK quando riceve "ImageProcessing" come input.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Desktop |
intestazione | prcomoem.h (include Prcomoem.h) |