Freigeben über


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 einen Eingabe-DIB.

pBitmapInfoHeader

Vom Aufrufer bereitgestellter Zeiger auf eine BITMAPINFOHEADER-Struktur, die die Bitmap beschreibt, auf die von pSrcBitmap verwiesen wird. Die BITMAPINFOHEADER-Struktur wird in der Microsoft Windows SDK-Dokumentation 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 Diskussion des pPaletteEntry-Parameters in HT_Get8BPPMaskPalette.

dwCallbackID

Vom Aufrufer bereitgestellter Wert, der dem *IPCallbackID-Attribut der aktuell 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 Speicherspeicherort, der die Adresse eines Puffers enthält. Der Inhalt des Puffers hängt davon ab, wohin der 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 *ppbResult auf die Adresse des Puffers festgelegt werden, der den konvertierten DIB enthält, und S_OK zurückgeben. Wenn bei der Konvertierung ein Fehler auftritt, sollte die Methode *ppbResult auf NULL festlegen und E_FAIL zurückgeben.

Wenn diese Methode den konvertierten DIB an den Spooler senden möchte und die Konvertierung erfolgreich ist, 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 Diskussion zu den Attributen *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 Quellbitbitbit

Bitmapeigenschaften des Ziels

Hinweise

Die IPrintOemUni::ImageProcessing -Methode wird verwendet, um Bild-Bitmaps zu ändern, bevor sie an den Druckspooler gesendet werden. Der Zweck besteht darin, benutzerdefinierte 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 0 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 Attribut *IPCallbackID finden Sie unter Optionsattribute für das ColorMode-Feature.)

Wenn der von dwCallbackID angegebene aktuelle Farbmodus einer ist, den Unidrv unterstützt, sollte die IPrintOemUni::ImageProcessing Methode Halbtonierungsvorgänge für die empfangene Bitmap ausführen und sie zum Spooling an Unidrv zurückgeben. Wenn der aktuelle Farbmodus nicht von Unidrv unterstützt wird, muss die -Methode Halbtonierungsvorgänge ausführen und dann die Bitmap in der Spule spulen.

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

  • Führen Sie Halbtonierungsvorgänge für die Daten durch, wie durch das pHalftoneOption-Element der IPPARAMS-Struktur angegeben.
  • Geben Sie die geänderten Bilddaten an Unidrv zurück, indem Sie sie in einen Puffer legen 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 sein, 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 Folgendes 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 Feature ColorMode zugeordnet ist. Dieser Wert ist der Wert des dwCallbackID-Parameters .

Unabhängig davon, ob die IPrintOemUni::ImageProcessing Methode Farbformatierungsvorgänge und Das 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 Mengen an Arbeitsspeicher für Ziel-Bitmaps 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 eine Region 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 mit leeren und nicht angezeigten Regionen 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 sind von oben nach unten sortiert und unkomprimiert.
  • Das Datenformat ist unter Umgang mit 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-Members der GDIINFO-Struktur erläutert. Mit anderen Worten, 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. Für 24 Bits pro Pixel ist n 8, wie in der folgenden Abbildung dargestellt. Für CMYK enthält die vierte Gruppe von n Bits schwarz.

PRIMARY_ORDER_CBA Format
Die obige Abbildung zeigt Farbdaten im PRIMARY_ORDER_CBA Format für zwei Pixel mit 24 Bit Farbdaten pro Pixel. Wenn Sie von Adressen mit geringem Arbeitsspeicher zu adressen mit hohem Arbeitsspeicher wechseln, gibt es acht Bits mit blauen Daten, dann acht Bits 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 Umgang mit Farbformaten aufgeführt sein, und es muss mit den Attributen *DevBPP und *DevNumOfPlanes des von 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 Quell-Bitmap beschrieben.
  • Die BITMAPINFOHEADER-Struktur, die von pBitmapInfoHeader angegeben wird, muss sowohl die Eingabe- als auch die Ausgabe-Bitmaps 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