Преобразование изображения: RGBA в RGB

предполагая, что у меня был вывод RGBA (32 бита) из захвата кадров с неиспользованным альфа-каналом (значения сохраняются при заполнении захватчиками кадров), существует ли какой-либо эффективный метод преобразования в RGB (24 бита)?

Я имею дело с 5-мегапиксельными потоковыми изображениями, поэтому скорость тоже имеет значение. имейте в виду, что данные в альфа-канале могут быть отброшены.


person YeenFei    schedule 03.03.2010    source источник
comment
Что именно имеется в виду? 24-битные реализации RGB используют 32 бита и игнорируют альфа-канал, поэтому вам не нужно вносить никаких изменений, но только если вы хотите отказаться от альфа-канала, т.е. если он также не используется вашим источником   -  person aviraldg    schedule 03.03.2010
comment
Я пишу уровень аппаратной абстракции для своей компании. потребитель данных принимает только 24 бита RGB, и их изменение — последнее, что нам хотелось бы делать. поэтому у меня остается возможность создать еще один 24-битный буфер RGB и поместить в него результат преобразования.   -  person YeenFei    schedule 03.03.2010
comment
@yeenfai: Хорошо, для оборудования это может быть по-другому ...   -  person aviraldg    schedule 03.03.2010


Ответы (2)


Просто скопируйте данные и пропустите неиспользуемые альфа-байты.

Если для вас важна скорость, вы можете использовать SSE или MMX и использовать встроенные инструкции по перетасовке битов. Обычно это немного быстрее, чем обычный c-код.

5 мегапикселей — это не так много данных, если только вам не нужно делать это со скоростью 100 кадров в секунду.

person Nils Pipenbrinck    schedule 03.03.2010

Просто скопируйте байты RGB и отбросьте альфа-канал (1 байт). Возможные оптимизации будут зависеть от аппаратного обеспечения. Например, у Intel есть специальные функции преобразования цветов в IPP. библиотека.

person Kirill V. Lyadvinsky    schedule 03.03.2010
comment
Да, просто пропустите альфа-биты и скопируйте остальные. Если вы работаете с аппаратным обеспечением, у него, вероятно, будет внутренний буфер, используйте его. - person aviraldg; 03.03.2010