Image-Data Dekomprimierung
Ihre Anwendung verwendet eine Reihe von ICDecompressEx-Funktionen, um den Dekomprimierer zu steuern. Mit den Funktionen können Sie die folgenden Aufgaben ausführen:
- Wählen Sie einen Dekomprimierer aus.
- Bereiten Sie den Dekomprimierer vor.
- Dekomprimen Sie die Daten.
- Dekomprimierung beenden.
Ihre Anwendung behandelt die Dekomprimierung ähnlich wie die Komprimierung, mit der Ausnahme, dass das Eingabeformat ein komprimiertes Format und das Ausgabeformat ein anzeigebares Format ist. Das Eingabeformat für die Dekomprimierung wird in der Regel aus dem Streamheader abgerufen. Nachdem Sie das Eingabeformat bestimmt haben, kann Ihre Anwendung die IcLocate- oder ICOpen-Funktionen verwenden, um einen Dekomprimierer zu finden, der ihn verarbeiten kann.
Die ICDecompressEx-Funktionen und -Makros sind eine Obermenge der ICDecompress-Funktionsgruppe und bieten weitere Funktionen. Die Funktionen ICDecompressEx, ICDecompressExBegin, ICDecompressExEndund ICDecompressExQuery ersetzen die Funktionen ICDecompress, ICDecompressBegin, ICDecompressEndund ICDecompressQuery. Verwenden Sie die ICDecompressEx-Funktionen und -Makros anstelle der ICDecompress-Entsprechungen.
Dekomprimierungs- und Dekomprimierungsformatauswahl
Wenn Sie Daten dekomprimieren möchten und Ihre Anwendung ein bestimmtes Ausgabeformat erfordert, können Sie die ICDecompressExQuery-Funktion verwenden, um den Dekomprimierer abzufragen und zu ermitteln, ob er die Eingabe- und Ausgabeformate unterstützt.
Wenn das Ausgabeformat in Ihrer Anwendung nicht wichtig ist, benötigen Sie nur einen Dekomprimierer, der das Eingabeformat verarbeiten kann. Um zu bestimmen, ob ein Dekomprimierer das Eingabeformat verarbeiten kann, verwenden Sie ICDecompressExQuery, und geben Sie NULL für den lpbiDst-Parameter an. Ihre Anwendung kann die Puffergröße bestimmen, die für die Daten erforderlich ist, die das Dekomprimierungsformat angeben, indem sie die ICM _ DECOMPRESS _ GET _ FORMAT-Nachricht sendet (oder das IcDecompressGetFormatSize-Makro verwenden). Sie können auch ICM _ DECOMPRESS _ GET _ FORMAT (oder das ICDecompressGetFormat-Makro) senden, um die Formatdaten abzurufen. Der Dekomprimierer gibt das vorgeschlagene Format in einer BITMAPINFO-Struktur zurück. Dieses Format behält in der Regel die meisten Informationen während der Dekomprimierung bei. Ihre Anwendung sollte sicherstellen, dass der Dekomprimierer erfolgreich zurückgegeben wird, bevor die Informationen dekomprimiert werden.
Da Ihre Anwendung den für die Dekomprimierung erforderlichen Arbeitsspeicher zuweist, muss sie den maximalen Arbeitsspeicher bestimmen, den der Dekomprimierer für das Ausgabeformat benötigen kann. Die ICM _ DECOMPRESS _ GET _ FORMAT-Nachricht ruft die Anzahl der Bytes ab, die der Dekomprimierer für das Standardformat verwendet.
Wenn Ihre Anwendung mit ICDecompressExQueryein eigenes Format definiert, muss sie auch eine Palette für die Bitmap abrufen. ICDecompressExQuery stellt keine Palettendefinitionen bereit. (Die meisten Anwendungen verwenden Standardformate und müssen keine Palette abrufen.) Ihre Anwendung kann die Palette abrufen, indem Sie die ICM _ DECOMPRESS _ GET _ PALETTE-Nachricht senden (oder das ICDecompressGetPalette-Makro verwenden).
Dekomprimierungsinitialisierung
Nachdem Ihre Anwendung einen Dekomprimierer ausgewählt hat, der die benötigten Eingabe- und Ausgabeformate verarbeiten kann, können Sie den Dekomprimierer mithilfe der ICDecompressExBegin-Funktion initialisieren. Diese Funktion erfordert das Dekomprimiererhandle und die Eingabe- und Ausgabeformate.
Datendekomprimierung
Sie können die ICDecompressEx-Funktion verwenden, um einen Frame zu dekomprimen. Ihre Anwendung muss diese Funktion wiederholt verwenden, bis alle Frames in einer Sequenz dekomprimiert werden.
Wenn Ihr Videostream während der Wiedergabe hinter anderen Komponenten (z. B. Audio) zurückblieb, kann Ihre Anwendung das ICDECOMPRESS-FLAG _ CABRYUP angeben, um die Dekomprimierung zu beschleunigen. Dazu extrahiert ein Dekomprimierer möglicherweise nur die Informationen, die er benötigt, um den nächsten Frame zu dekomprimen und den aktuellen Frame nicht vollständig zu dekomprimen. Daher sollte Ihre Anwendung nicht versuchen, die dekomprimierten Daten zu zeichnen, wenn sie dieses Flag verwendet.
Nachdem ihre Anwendung die Daten dekomprimiert hat, kann sie die ICM _ DECOMPRESSEX-END-Nachricht _ senden (oder das IcDecompressExEnd-Makro verwenden), um den Dekomprimierer über den Abschluss zu informieren. Wenn Sie die Dekomprimierung nach der Verwendung dieser Funktion neu starten möchten, muss Ihre Anwendung den Dekomprimierer mithilfe von ICDecompressExBeginerneut initialisieren.