共用方式為


使用 16 位 RGB

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

16 位未壓縮 RGB 定義了兩種格式:

  • MEDIASUBTYPE_555會針對圖元中的紅色、綠色和藍色元件使用五個位。 WORD中最重要的位會被忽略。
  • MEDIASUBTYPE_565會針對紅色和藍色元件使用五個位,而綠色元件則使用六個位。 此格式反映人類視覺對可見頻譜綠色部分最敏感的事實。

RGB 565

若要從 RGB 565 影像擷取色彩元件,請將每個圖元視為 WORD 類型,並使用下列位元遮罩:

WORD red_mask = 0xF800;
WORD green_mask = 0x7E0;
WORD blue_mask = 0x1F;

從圖元取得色彩元件,如下所示:

BYTE red_value = (pixel & red_mask) >> 11;
BYTE green_value = (pixel & green_mask) >> 5;
BYTE blue_value = (pixel & blue_mask);

請記住,紅色和藍色通道是 5 位,綠色色板是 6 位。 若要將這些值轉換成 8 位元件, (24 位或 32 位 RGB) ,您必須將適當的位數向左移:

// Expand to 8-bit values.
BYTE red   = red_value << 3;
BYTE green = green_value << 2;
BYTE blue  = blue_value << 3;

反轉此程式以建立 RGB 565 圖元。 假設色彩值已截斷為正確的位數:

WORD pixel565 = (red_value << 11) | (green_value << 5) | blue_value;

RGB 555

使用 RGB 555 基本上與 RGB 565 相同,但位元遮罩和位移位作業不同。 若要從 RGB 555 圖元取得色彩元件,請執行下列動作:

WORD red_mask = 0x7C00;
WORD green_mask = 0x3E0;
WORD blue_mask = 0x1F;

BYTE red_value = (pixel & red_mask) >> 10;
BYTE green_value = (pixel & green_mask) >> 5;
BYTE blue_value = (pixel & blue_mask);

// Expand to 8-bit values:
BYTE red   = red_value << 3;
BYTE green = green_value << 3;
BYTE blue  = blue_value << 3;

若要將紅色、綠色和藍色值封裝成 RGB 555 圖元,請執行下列動作:

WORD pixel565 = (red << 10) | (green << 5) | blue;

未壓縮的 RGB 視訊子類型