硬體繪圖功能

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

某些轉譯器可以在解壓縮視訊畫面時直接繪製到視訊硬體。 這些轉譯器會傳回VIDCF_DRAW旗標,以回應 ICGetInfo 函式。 使用這種類型的轉譯器時,您的應用程式不需要處理解壓縮的資料。 它可讓轉譯器保留解壓縮的資料以供繪製。

如果您的應用程式使用具有繪圖功能的轉譯器,它必須處理下列工作:

  • 選取轉譯器。
  • 指定影像格式。
  • 初始化轉譯器。
  • 繪製資料。
  • 控制項繪圖參數。

轉譯器選取

ICDrawOpen宏會開啟可繪製具有指定格式之影像的轉譯器。 如果轉譯器成功,則會傳回轉譯器的控制碼,否則傳回零。 這個宏會使用 ICLocate 函式來開啟轉譯器。

指定影像格式

因為您的應用程式不需要繪製解壓縮的資料,所以不需要特定的輸出格式。 不過,它必須確定轉譯器可以使用輸入格式繪製,方法是使用 ICM_DRAW_QUERY 訊息 (或使用 ICDrawQuery 宏) 。 此訊息無法判斷轉譯器是否可以繪製點陣圖。 如果您的應用程式必須判斷轉譯器是否可以繪製點陣圖,請使用此訊息搭配 ICDrawBegin 函式。

您的應用程式可以使用 ICDrawSuggestFormat 函式來建議輸入格式。 當轉譯器分隔繪圖功能與解壓縮功能時,會使用此函式。 大部分使用繪圖函式的應用程式都不需要判斷輸出格式。

轉譯器初始化

ICDrawBegin函式會初始化轉譯器,並告知它繪圖目的地。 此函式也可以執行下列工作:

  • 判斷轉譯器是否支援特定的輸入格式。
  • 指定繪圖作業是否佔用視窗或整個螢幕。
  • 使用來源矩形指定要顯示的影像部分。
  • 定義影像序列的播放速率。

有些轉譯器會緩衝壓縮的資料,以更有效率地運作。 您的應用程式可以在 (傳送ICM_GETBUFFERSWANTED 訊息,或使用 ICGetBuffersWanted 宏) 來判斷轉譯器要求的緩衝區數目。 您的應用程式應該預先載入這些緩衝區,並將其傳送至轉譯器,再繪製。

繪製資料

您可以使用 ICDraw 函式來解壓縮用於繪製的資料。 不過,在您的應用程式傳送 ICM_DRAW_START 訊息 (或使用 ICDrawStart 宏) 之後,轉譯器才會開始繪製資料。 當您的應用程式呼叫此函式時,轉譯器會開始以 dwRate 參數所指定的速率繪製框架,並除以 dwScale 參數;當應用程式使用 ICDrawBegin 函式初始化轉譯器時,會提供這些參數。 繪圖會繼續,直到您的應用程式傳送 ICM_DRAW_STOP 訊息 (或使用 ICDrawStop 宏) 為止。

注意

如果轉譯器在繪製之前緩衝處理資料,則您的應用程式在傳送ICGetBuffersWanted宏傳回的轉譯器所傳回的畫面數之前,不應該使用ICDrawStart宏。

 

ICDrawlTime參數會指定繪製框架的時間。 轉譯器會將這個整數除以 ICDrawBegin 指定的時間小數位數,以取得實際的時間。 ICDraw函式的時間相對於ICDrawStartICDrawStart 會將時鐘設定為零。 例如,如果您的應用程式針對時間刻度指定 1000,而 lTime則轉譯器會將畫面格繪製為序列 75 毫秒。

控制繪圖參數

您可以藉由傳送 ICM_DRAW_GETTIME 訊息 (或使用 ICDrawGetTime 宏) 來監視轉譯器的時鐘,也可以藉由傳送 ICM_DRAW_SETTIME 訊息 (或使用 ICDrawSetTime 宏) 來設定轉譯器的時鐘。

若要在繪製轉譯器時變更目前的位置,您的應用程式可以傳送 ICM_DRAW_WINDOW 訊息 (或使用 ICDrawWindow 宏) 來重新置放視窗。 每當視窗變更時,應用程式通常會使用此訊息。

如果播放視窗取得實現調色盤訊息,您的應用程式必須傳送 ICM_DRAW_REALIZE 訊息 (或使用 ICDrawRealize 宏) 讓轉譯器再次實現調色盤以供播放。 應用程式可以藉由傳送 ICM_DRAW_CHANGEPALETTE 訊息 (或使用 ICDrawChangePalette 宏) 來變更調色盤,並藉由傳送 ICM_DRAW_GET_PALETTE 訊息來取得目前的調色盤。

某些轉譯器必須特別指示,以顯示傳遞給它們的畫面格。 傳送 ICM_DRAW_RENDERBUFFER 訊息 (或使用 ICDrawRenderBuffer 宏) 會導致這些轉譯器繪製框架。