2013-05-02 4 views
0

Я обновляю программное обеспечение GUI с поддержкой SVGA для Qt-driven. Одной из проблем является преобразование цвета. Поскольку SVGA использует 256 цветовую модель, а Qt использует цветовую модель RGB (на самом деле она поддерживает и другие модели, но я использую RGB). Мне нужно линейное отображение 256 цветов в эквивалентный RGB-цвет.Как преобразовать 256 цветов в ближайший соответствующий цвет RGB?

Есть ли какая-нибудь формула для этого?

Примечание: Я использую C/C++ в качестве языка сборки.

ответ

1

Вам необходимо определить, какая палитра используется. Это должно быть закодировано в приложении. Палитра представляет собой массив из 256 значений RGB. Чтобы использовать цвет, вы используете индекс массива (один байт). Когда у вас есть информация о палитре, у вас есть линейное сопоставление, которое вам нужно.

В режимах VGA имеется палитра по умолчанию. Большинство программ будут устанавливать свои собственные, но в любом случае информация о палитре будет размещаться на видеокарте. Вы должны иметь возможность запросить его, но я не могу с этим поделать. Последний раз, когда я написал код для этого, было около 15 лет назад, когда мы все знали, какие адреса памяти нужно писать для различных графических операций.

Еще один способ узнать палитру: если вы можете изменить это приложение, чтобы написать кучу пикселей, просто нарисуйте блок 16x16, содержащий все 256 значений цвета, получите снимок экрана, а затем восстановите палитру.