Image-Data壓縮

[與此頁面相關聯的功能影片 壓縮管理員是舊版功能。 Microsoft 強烈建議新程式碼不使用這項功能。]

您的應用程式可以使用一系列的 ICCompress 函式和宏來壓縮資料。 函式和宏可協助您執行下列工作:

  • 決定要用於指定輸入格式的壓縮格式。
  • 準備冰箱。
  • 壓縮資料。
  • 結束壓縮。

您的應用程式可以使用 ICCompress 函式和宏來增加壓縮程式的控制權。 此函式和宏群組會處理個別框架,而不是整個序列。 例如,您的應用程式可以使用 ICCompress 函式來識別要壓縮為主要畫面格的畫面格。

壓縮會以一種格式接收資料、壓縮資料,並使用指定的格式傳回資料的壓縮版本。 典型的輸入格式會使用 BITMAPINFO 結構來指定 DIB。 一般輸出格式會指定壓縮的 DIB,也使用 BITMAPINFO 結構。

注意

若要將播放期間的影像和音訊降低降到最低,請避免多次壓縮 AVI 檔案。 在編輯系統中合併未壓縮的視訊片段,然後壓縮最終產品。

 

壓縮格式選取

如果您想要壓縮資料,而且您的應用程式需要特定的輸出格式,請傳送 ICM_COMPRESS_QUERY 訊息 (,或使用 ICCompressQuery 宏) 查詢壓縮器,以判斷它是否支援輸入和輸出格式。

如果輸出格式對您的應用程式而言並不重要,您只需要尋找可以處理輸入格式的壓紙機。 若要判斷壓壓器是否可以處理輸入格式,您可以傳送ICM_COMPRESS_QUERY,並指定lParam參數的Null。 此訊息不會將輸出格式傳回至您的應用程式。 您的應用程式可以藉由傳送 ICM_COMPRESS_GET_FORMAT 訊息 (或使用 ICCompressGetFormatSize 宏) 來判斷指定壓縮格式的資料所需的緩衝區大小。 您也可以傳送ICM_COMPRESS_GET_FORMAT (或 ICCompressGetFormat 宏) 來擷取格式資料。

如果您想要判斷壓縮可能需要的最大緩衝區,請傳送 ICM_COMPRESS_GET_SIZE 訊息 (或使用 ICCompressGetSize 宏) 。 您可以使用 ICSendMessage 函式傳回的位元組數目,為後續的影像壓縮配置緩衝區。

壓機初始化

當您的應用程式選取可處理所需輸入和輸出格式的壓縮器之後,您可以使用 ICM_COMPRESS_BEGIN 訊息 (或使用 ICCompressBegin 宏) 來初始化壓縮。 此訊息需要壓縮控制碼和輸入和輸出格式。

資料壓縮

您可以使用 ICCompress 函式壓縮框架。 您的應用程式必須重複使用此函式,直到序列中的所有畫面都壓縮為止。 您的應用程式也必須追蹤並遞增使用 ICCompress壓縮的每個畫面格數目。 壓機會使用此值來檢查框架在快速時態壓縮期間是否依序傳送, (儲存後續畫面) 之間的差異。 如果您的應用程式重新壓縮框架,它應該使用與第一次壓縮框架時相同的畫面編號。 如果您的應用程式壓縮仍在畫面格的影像,它可以指定零的框架數目。

您的應用程式可以使用 ICCOMPRESS_KEYFRAME 旗標,讓 ICCompress 壓縮畫面格成為主要畫面格。

當 VCM 在壓縮框架之後將控制權傳回您的應用程式時,VCM 會將壓縮的資料儲存在 lpbiOutputlpData 參數所參考的結構中。 如果您的應用程式需要移動壓縮的資料,它可以在lpbiOutput中所指定BITMAPINFO結構的biSizeImage成員中找到其大小。

注意

您的應用程式必須配置儲存未壓縮和壓縮資料的結構和緩衝區。 如果壓縮支援時態壓縮,您的應用程式也必須配置結構和緩衝區,以保存先前資訊框架的格式和資料。

 

結束壓縮

在應用程式壓縮資料之後,可以使用 ICCompressEnd 宏來通知它已完成。 如果您想要在使用此函式之後重新開機壓縮,您的應用程式必須透過傳送 ICM_COMPRESS_BEGIN訊息 ( 或使用 ICCompressBegin 宏) 來重新初始化壓縮。