다음을 통해 공유


16비트 RGB 작업

[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngineAudio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 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 비디오 하위 형식