Image-Data decompressione

[La funzionalità associata a questa pagina, Gestione compressione video, è una funzionalità legacy. Microsoft consiglia vivamente che il nuovo codice non usi questa funzionalità.

L'applicazione usa una serie di funzioni ICDecompressEx per controllare il decompressore. Le funzioni consentono di eseguire le attività seguenti:

  • Selezionare un decompressor.
  • Preparare il decompressore.
  • Decompresse i dati.
  • Decompressione finale.

L'applicazione gestisce la decompressione in modo analogo al modo in cui gestisce la compressione, ad eccezione del fatto che il formato di input è un formato compresso e il formato di output è un formato visualizzabile. Il formato di input per la decompressione viene in genere ottenuto dall'intestazione del flusso. Dopo aver determinato il formato di input, l'applicazione può usare le funzioni ICLocate o ICOpen per trovare un decompressore che può gestirlo.

Le funzioni e le macro ICDecompressEx sono un superset del gruppo di funzioni ICDecompress e offrono altre funzionalità. La funzionalità di ICDecompressEx, ICDecompressExBegin, ICDecompressExEnd e ICDecompressExQuery sostituisce quella delle funzioni ICDecompress, ICDecompressBegin, ICDecompressEnd e ICDecompressQuery. Usare le funzioni ICDecompressEx e le macro al posto degli equivalenti ICDecompress .

Selezione del decompressore e decompressione

Se si desidera decomprimere i dati e l'applicazione richiede un formato di output specifico, è possibile usare la funzione ICDecompressExQuery per eseguire query sul decompressore per determinare se supporta i formati di input e output.

Se il formato di output non è importante nell'applicazione, è necessario trovare solo un decompressor che può gestire il formato di input. Per determinare se un decompressore può gestire il formato di input, usare ICDecompressExQuery e specificare NULL per il parametro lpbiDst . L'applicazione può determinare le dimensioni del buffer necessarie per i dati che specificano il formato di decompressione inviando il messaggio di ICM_DECOMPRESS_GET_FORMAT (o usare la macro ICDecompressGetFormatSize ). È anche possibile inviare ICM_DECOMPRESS_GET_FORMAT (o la macro ICDecompressGetFormat ) per recuperare i dati di formato. Il decompressore restituisce il formato suggerito in una struttura BITMAPINFO . Questo formato mantiene in genere la maggior parte delle informazioni durante la decompressione. L'applicazione deve assicurarsi che il decompressore restituisca correttamente prima di decompresse le informazioni.

Poiché l'applicazione alloca la memoria necessaria per la decompressione, deve determinare la memoria massima che il decompressore può richiedere per il formato di output. Il messaggio ICM_DECOMPRESS_GET_FORMAT ottiene il numero di byte usati dal decompressore per il formato predefinito.

Se l'applicazione definisce il proprio formato usando ICDecompressExQuery, deve anche ottenere una tavolozza per la bitmap; ICDecompressExQuery non fornisce definizioni di tavolozza. La maggior parte delle applicazioni usa formati standard e non deve ottenere una tavolozza. L'applicazione può ottenere la tavolozza inviando il messaggio ICM_DECOMPRESS_GET_PALETTE (o usare la macro ICDecompressGetPalette ).

Inizializzazione decompressor

Dopo aver selezionato un decompressor che può gestire i formati di input e di output necessari, è possibile inizializzare il decompressore usando la funzione ICDecompressExBegin . Questa funzione richiede l'handle decompressor e i formati di input e output.

Decompressione dei dati

È possibile usare la funzione ICDecompressEx per decomprimere un frame. L'applicazione deve usare ripetutamente questa funzione fino a quando tutti i fotogrammi in una sequenza non vengono decompressi.

Se il flusso video si ritarda dietro altri componenti (ad esempio audio) durante la riproduzione, l'applicazione può specificare il flag di ICDECOMPRESS_HURRYUP per velocizzare la decompressione. A tale scopo, un decompressore potrebbe estrarre solo le informazioni necessarie per decomprimere il frame successivo e non decomprimere completamente il frame corrente. Pertanto, l'applicazione non deve provare a disegnare i dati decompressi quando usa questo flag.

Dopo che l'applicazione ha decompresso i dati, può inviare il messaggio di ICM_DECOMPRESSEX_END (o usare la macro ICDecompressExEnd ) per notificare al decompressore che è stato completato. Se si vuole riavviare la decompressione dopo aver usato questa funzione, l'applicazione deve reinizializzare il decompressore usando ICDecompressExBegin.

Servizi VCM