Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, 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;
Связанные разделы