다음을 통해 공유


16비트 RGB 작업

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

16비트 압축되지 않은 RGB에 대해 두 가지 형식이 정의됩니다.

  • MEDIASUBTYPE_555 빨간색, 녹색 및 파란색 구성 요소에 대해 각각 5비트를 픽셀 단위로 사용합니다. WORD에서 가장 중요한 비트는 무시됩니다.
  • MEDIASUBTYPE_565 빨간색 및 파란색 구성 요소에 5비트를 사용하고 녹색 구성 요소에 대해 6비트를 사용합니다. 이 형식은 인간의 시력이 가시 스펙트럼의 녹색 부분에 가장 민감하다는 사실을 반영합니다.

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 비디오 하위 유형