AS>>К сожалению, данный код некорректен, посколько не учитывает возможность ненулевого альфа-байта. При наличии оного, ессно, получается кака.
M>Согласен.
AS>>Маскирование добавляет к нему все те же самые 2 "больших" and.
M>Не согласен, одного "большого" AND будет достаточно.
Например? Одна "кака" получается в старшем бите, а вторая кака — в младших, при OR.
AS>>Ну а во-вторых, что значит "проще"?
M>Ну выглядит логичнее и понятнее
Зато тот код работает с любыми непрерывными масками

В аллегро его в макрос вытащили, и для 5-6-5 и 5-5-5 один код пользуется.
В любом случае, спасибо за обсуждение — получается интересно.
Теперь, в общем, я выяснил, что сдвиг — это неправильный способ преобразования даже в форматы с меньшей глубиной цвета (хотя gdi внутри себя именно так и делает). Особенно это хорошо это заметно на 32->8(332). Придется, видимо, делать лукап таблицы.