IPrintOemUni::ImageProcessing-Methode (prcomoem.h)

Die IPrintOemUni::ImageProcessing -Methode kann mit von Unidrv unterstützten Druckern verwendet werden, um Bild-Bitmapdaten zu ändern, um Farbformatierung oder Halbtonierung durchzuführen. Die -Methode kann die geänderte Bitmap an Unidrv zurückgeben oder direkt an den Druckspooler senden.

Syntax

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

Parameter

pdevobj

Vom Aufrufer bereitgestellter Zeiger auf eine DEVOBJ-Struktur .

pSrcBitmap

Vom Aufrufer bereitgestellter Zeiger auf eine Eingabe-DIB.

pBitmapInfoHeader

Vom Aufrufer bereitgestellter Zeiger auf eine BITMAPINFOHEADER-Struktur, die die Bitmap beschreibt, auf die pSrcBitmap verweist. Die BITMAPINFOHEADER-Struktur wird in der dokumentation Microsoft Windows SDK beschrieben.

pColorTable

Vom Aufrufer bereitgestellter Zeiger auf eine Farbtabelle. Dieser Parameter wird nur verwendet, wenn das Ausgabeformat acht Bits pro Pixel beträgt. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Beim Interpretieren einer Bitmap müssen Sie die Farbtabelle untersuchen. Unidrv kann die Farben in einer Bitmap ändern, nimmt aber auch entsprechende Anpassungen in der Farbtabelle vor, was zu keiner Nettoänderung führt. Wenn Sie jedoch Farbtabellenänderungen ignorieren und nur die Bitmap untersuchen, wird ein Bild möglicherweise nicht ordnungsgemäß gedruckt. Ein Beispiel finden Sie in der Erläuterung des pPaletteEntry-Parameters in HT_Get8BPPMaskPalette.

dwCallbackID

Vom Aufrufer bereitgestellter Wert, der dem *IPCallbackID-Attribut der derzeit ausgewählten Option für das ColorMode-Feature zugewiesen ist. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

pIPParams

Vom Aufrufer bereitgestellter Zeiger auf eine IPPARAMS-Struktur .

[out] ppbResult

Zeiger auf einen Speicherort, der die Adresse eines Puffers enthält. Der Inhalt des Puffers hängt davon ab, wohin die konvertierte DIB gesendet werden soll.

Wenn diese Methode beabsichtigt, den konvertierten DIB zurück an Unidrv zu senden und die Konvertierung erfolgreich durchzuführen, sollte sie *ppbResult auf die Adresse des Puffers festlegen, der den konvertierten DIB enthält, und S_OK zurückgeben. Wenn die Konvertierung fehlschlägt, sollte die Methode *ppbResult auf NULL festlegen und E_FAIL zurückgeben.

Wenn diese Methode beabsichtigt, den konvertierten DIB an den Spooler zu senden und die Konvertierung erfolgreich durchzuführen, sollte die Methode *ppbResult auf TRUE festlegen und S_OK zurückgeben. Wenn die Konvertierung fehlschlägt, sollte die Methode *ppbResult auf FALSE festlegen und E_FAIL zurückgeben. Weitere Informationen finden Sie in der Erläuterung der Attribute *DevBPP und *DevNumOfPlanes im Abschnitt Hinweise.

Rückgabewert

Die -Methode muss einen der folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Der Vorgang wurde erfolgreich ausgeführt.
E_FAIL
Fehler beim Vorgang.
E_NOTIMPL
Die Methode ist nicht implementiert.
 

Eigenschaften der Quellbit

Merkmale der Zielbitbitbit

Hinweise

Die IPrintOemUni::ImageProcessing -Methode wird verwendet, um Bild-Bitmaps zu ändern, bevor sie an den Druckspooler gesendet werden. Der Zweck besteht darin, eine angepasste Unterstützung für Farbmodi und Halbtonierungsmethoden bereitzustellen, die von Unidrv nicht unterstützt werden. Ein Druckertreiber, der eine Bitmap an den Druckspooler sendet (im Gegensatz zum Zurücksenden an Unidrv), muss die Attribute *DevBPP und *DevNumOfPlanes in der GPD-Datei des Druckers auf Null festlegen.

Wenn die -Methode implementiert ist und der GPD-Dateieintrag für das aktuelle Farbformat ein *IPCallbackID-Attribut enthält, ruft Unidrv die Methode jedes Mal auf, wenn eine Bitmap verfügbar ist. Der Aufruf erfolgt, nachdem GDI die Bitmap gerendert hat, die dann an den Spooler gesendet wird. (Informationen zum *IPCallbackID-Attribut finden Sie unter Optionsattribute für das ColorMode-Feature.)

Wenn der aktuelle Farbmodus, wie von dwCallbackID angegeben, von Unidrv unterstützt wird, sollte die IPrintOemUni::ImageProcessing Methode Halbtonierungsvorgänge für die empfangene Bitmap ausführen und zum Spooling an Unidrv zurückgeben. Wenn der aktuelle Farbmodus einer ist, der von Unidrv nicht unterstützt wird, muss die Methode Halbtonierungsvorgänge ausführen und dann die Bitmap spoolen.

Wenn die Methode nur Halbtonierungsvorgänge ausführt, muss sie die folgenden Aktionen ausführen:

  • Führen Sie Halbtonierungsvorgänge für die Daten aus, wie durch den pHalftoneOption-Member der IPPARAMS-Struktur angegeben.
  • Geben Sie die geänderten Bilddaten an Unidrv zurück, indem Sie sie in einem Puffer platzieren und die Adresse des Puffers als Rückgabewert der Methode angeben. Der zurückgegebene Puffer kann der sein, auf den pSrcBitmap verweist, oder es kann sich um einen puffer, der lokal zugeordnet ist.
Weitere Informationen zum Anpassen von Halbtonierungsvorgängen in Unidrv finden Sie unter Angepasste Halbtonierung.

Um die benutzerdefinierte Farbformatierung zu verarbeiten, muss die IPrintOemUni::ImageProcessing -Methode die folgenden Schritte ausführen:

Weitere Informationen zum Anpassen von Farbformatierungsvorgängen in Unidrv finden Sie unter Angepasste Farbformate.

Der dwCallbackID-Parameter gibt den Typ der Farbformatierung an, falls vorhanden, die ausgeführt werden soll. In der GPD-Datei des Druckers beschreibt jeder *Option-Eintrag für das ColorMode-Feature ein Farbformat. Wenn das Format eine Verarbeitung durch die -Methode erfordert, muss der IPrintOemUni::ImageProcessing Eintrag *Option ein *IPCallbackID-Attribut enthalten. Wenn Unidrv die IPrintOemUni::ImageProcessing -Methode aufruft, wird der Attributwert angegeben, der der aktuell ausgewählten Option für das ColorMode-Feature zugeordnet ist. Dieser Wert ist der Wert des dwCallbackID-Parameters .

Unabhängig davon, ob die IPrintOemUni::ImageProcessing Methode Farbformatierungsvorgänge und Spooling von Bilddaten ausführt oder nur Halbtonierungsvorgänge ausführt und verarbeitete Bitmaps an Unidrv zurückgibt, sollte sie eine IPrintOemUni::MemoryUsage-Methode exportieren, wenn sie erhebliche Speichermengen für Zielbitbits oder andere Zwecke zuweist. Andernfalls kann die Systemleistung beeinträchtigt werden.

Wenn die -Methode implementiert ist, wird sie für jeden Rasterbereich auf der Seite aufgerufen. Wenn ein Bereich jedoch leer ist, wird das bBlankBand-Element der IPPARAMS-Struktur auf TRUE festgelegt, was angibt, dass der Block leer und die Daten ungültig sind. Da ein Band zur Optimierung der Leistung in abwechselnde Blöcke leerer und nicht angezeigter Bereiche unterteilt werden kann, entspricht die Blockgröße nicht immer der Bandgröße.

Die von pSrcBitmap und pBitmapInfoHeader beschriebene Quellbit weist die folgenden Merkmale auf:

  • DIB-Inhalte werden von oben nach unten sortiert und unkomprimiert.
  • Das Datenformat ist unter Behandeln von Farbformaten aufgeführt.
  • Wenn das Format eine Farbtabelle erfordert, wird von pColorTable auf die Tabelle verwiesen.
  • Farbdaten haben PRIMARY_ORDER_CBA Format, wie in der Beschreibung des ulPrimaryOrder-Elements der GDIINFO-Struktur erläutert. Anders ausgedrückt: Wenn das Farbformat RGB oder CMY ist, müssen die am wenigsten signifikanten n Bits den blauen oder gelben Wert enthalten, die nächsten n Bits müssen den grünen oder magenta-Wert enthalten, und die nächsten n Bits müssen den roten oder cyan-Wert enthalten. Nicht verwendete Bits befinden sich an der wichtigsten Position. Wenn das Format 4 Bits pro Pixel verwendet, ist n 1. Bei 24 Bits pro Pixel ist n 8, wie in der folgenden Abbildung dargestellt. Für CYMK enthält die vierte Gruppe von n Bits Schwarz.

PRIMARY_ORDER_CBA Format
Die vorherige Abbildung zeigt Farbdaten in PRIMARY_ORDER_CBA Format für zwei Pixel mit 24 Bits farblichen Daten pro Pixel. Wenn Sie von Adressen mit geringem Arbeitsspeicher zu adressen mit hohem Arbeitsspeicher wechseln, gibt es acht Bits an blauen Daten, dann acht Grüne Daten und dann acht Bits mit roten Daten, nach denen sich das Muster wiederholt. Dies wird auch als BGR-Geräteausgabereihenfolge bezeichnet.
Bei Halbtonierungsvorgängen, bei denen eine verarbeitete Bitmap an Unidrv zurückgegeben wird, muss die zurückgegebene Bitmap die folgenden Merkmale aufweisen:
  • DIB-Inhalte müssen von oben nach unten sortiert und unkomprimiert sein.
  • Das Datenformat muss unter Behandlung von Farbformaten aufgeführt sein und mit den Attributen *DevBPP und *DevNumOfPlanes des durch dwCallbackID identifizierten Farbformats kompatibel sein. (Informationen zu diesen Attributen finden Sie unter Optionsattribute für das ColorMode-Feature.)
  • Wenn das Format eine Farbtabelle erfordert, muss die Tabelle erstellt werden, und ihre Adresse muss in pColorTable zurückgegeben werden.
  • Farbdaten müssen in PRIMARY_ORDER_CBA Format zurückgegeben werden, wie für die Quellbbit beschrieben.
  • Die bitmapinfoheader-Struktur, die von pBitmapInfoHeader angegeben wird, muss sowohl die Eingabe- als auch die Ausgabebitbitbitbits beschreiben. Die IPrintOemUni::ImageProcessing -Methode darf den Inhalt der Struktur nicht ändern.
Die IPrintOemUni::ImageProcessing -Methode ist optional. Wenn ein Rendering-Plug-In diese Methode implementiert, muss die IPrintOemUni::GetImplementedMethod-Methode des Plug-Ins S_OK zurückgeben, wenn es "ImageProcessing" als Eingabe empfängt.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile prcomoem.h (include Prcomoem.h)

Weitere Informationen

HT_Get8BPPMaskPalette

IPrintOemUni

IPrintOemUni::FilterGraphics