Работа с 16-разрядной rgb-версией
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие 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;
Связанные темы