Freigeben über


IPrintOemUni::Compression-Methode (prcomoem.h)

Die IPrintOemUni::Compression -Methode kann mit von Unidrv unterstützten Druckern verwendet werden, um eine angepasste Bitmapkomprimierungsmethode bereitzustellen.

Syntax

HRESULT Compression(
        PDEVOBJ pdevobj,
        PBYTE   pInBuf,
        PBYTE   pOutBuf,
        DWORD   dwInLen,
        DWORD   dwOutLen,
  [out] OUT INT *piResult
);

Parameter

pdevobj

Vom Aufrufer bereitgestellter Zeiger auf eine DEVOBJ-Struktur .

pInBuf

Vom Aufrufer bereitgestellter Zeiger zum Eingeben von Scanzeilendaten.

pOutBuf

Vom Aufrufer bereitgestellter Zeiger auf einen Ausgabepuffer, um komprimierte Scanzeilendaten zu empfangen.

dwInLen

Vom Aufrufer bereitgestellte Länge der Eingabedaten.

dwOutLen

Vom Aufrufer bereitgestellte Länge des Ausgabepuffers.

[out] piResult

Empfängt einen von der Methode bereitgestellten Ergebniswert. Wenn der Vorgang erfolgreich ist, sollte dieser Wert die Anzahl komprimierter Bytes sein, die nicht größer als der für dwOutLen empfangene Wert sein darf. Wenn ein Fehler auftritt oder die Methode nicht komprimiert werden kann, sollte der Ergebniswert -1 sein.

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.

Hinweise

Die IPrintOemUni::Compression -Methode wird beim Rendern von Plug-Ins verwendet, um Scanzeilendaten zu komprimieren, bevor sie an den Druckspooler gesendet werden. Der Zweck der Methode besteht darin, Unterstützung für druckerspezifische Komprimierungsmethoden bereitzustellen, die von Unidrv nicht unterstützt werden.

Wenn die IPrintOemUni::Compression Methode definiert ist und die GPD-Datei des Druckers einen CmdEnableOEMComp-Befehlseintrag enthält, ruft Unidrv die Methode jedes Mal auf, wenn eine Scanzeile bereit ist, an den Druckspooler gesendet zu werden. (Informationen zum Befehl CmdEnableOEMComp finden Sie unter Befehle zur Rasterdatenkomprimierung.)

Die pInBuf - und dwInLen-Parameterwerte beschreiben einen Puffer mit einer Scanzeile der zu komprimierenden Bilddaten. Die Parameterwerte pOutBuf und dwOutLen beschreiben den Puffer, in den die IPrintOemUni::Compression Methode die komprimierten Daten platzieren soll.

Bevor Unidrv eine Scanzeile an den Druckspooler sendet, versucht es jede aktivierte Komprimierungsmethode, um zu ermitteln, welche die kleinste Datenstrom-Instanz erstellt. Nachdem der beste Komprimierungsalgorithmus ermittelt wurde (durch Komprimieren der Daten mit den einzelnen Methoden), wird der Druckerbefehl gespoolt, der es dem Drucker ermöglicht, das am besten komprimierte Format zu akzeptieren, und sendet dann die komprimierten Daten an den Drucker.

Daher wird die IPrintOemUni::Compression Methode für jede Scanzeile aufgerufen, unabhängig davon, ob die von der Methode zurückgegebenen komprimierten Daten tatsächlich verwendet werden oder nicht. Wenn die Methode aufgerufen wird, enthält dwOutLen die Länge, die von der besten Komprimierungsmethode zurückgegeben wird, die Unidrv bis dahin versucht hat. (Wenn keine anderen Methoden ausprobiert wurden, enthält dwOutLen die nicht komprimierte Länge.) Wenn der Algorithmus keine komprimierte Scanzeile erzeugen kann, die gleich oder kürzer als dwOutLen-Bytes ist, sollte er -1 an der von piResult angegebenen Position zurückgeben.

Wenn unidrv alle aktivierten Komprimierungsmethoden ausprobiert hat, die komprimierten Daten, die von IPrintOemUni::Compression zurückgegeben werden, die kleinste Länge aufweisen, sendet Unidrv den Puffer an den Druckspooler, der durch den Befehl cmdEnableOEMComp angegeben wird.

Wenn möglich, sollte der Komprimierungsalgorithmus der Methode den empfangenen dwOutLen-Wert verwenden, um zu bestimmen, ob der Algorithmus vor abschluss beendet werden kann, um Zeit zu sparen, wenn eine andere Komprimierungsmethode bereits ein besseres Ergebnis erzielt hat.

Die IPrintOemUni::Compression 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 "Compression" als Eingabe empfängt.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile prcomoem.h (einschließlich Prcomoem.h)