2013-05-18 3 views
1

Я уже изучил рабочий механизм RGBA, поэтому понял, что шестнадцатеричные числа, принадлежащие разным цветам, могут быть превращены в простые целые числа. Это означает, что я могу хранить цвета в целых числах, хотя некоторые из них довольно большие.Получение цвета, относящегося к данному целому числу

Мой вопрос в том, как я могу получить цвет, который принадлежит целому числу, которое я передаю программе?

EDIT: конечно, я забыл упомянуть, что я тоже использую Allegro, но я новичок в этом ... есть ли какие-либо функции того, что это может сделать?

ответ

0

Похоже, вы используете Allegro 4, если вы храните цвета в виде целых чисел. Он предоставляет множество функций для вас, просто ознакомьтесь с руководством.

// int makecol(int r, int g, int b); 

int white = makecol(255, 255, 255); 
int green = makecol(0, 255, 0); 

Или обратное:

int r = getr(color); 
int g = getg(color); 
int b = getb(color); 

С Allegro 4, порядок зависит от видеокарты. Таким образом, возвращаемое значение makecol() может отличаться для одного и того же цвета, если оно хранится в RGB или BGR. Поэтому вы должны использовать вышеуказанные функции для получения правильных значений цвета и только после настройки графического режима.

Если вы используете Allegro 5 (который я настоятельно рекомендую для Allegro 4), вы используете структуру ALLEGRO_COLOR, которая скрывает основные детали реализации, и, таким образом, ни одно из вышеперечисленных случаев не применимо.

+0

Да, я использую Allegro 5. =) , но вы все еще не понимаете, что я имею в виду: я хочу сохранить цвет с ОДНОМ числом вместо ТРИ, потому что обработка трех чисел более рискованна, чем только одна для каждого элемента. Но, конечно, спасибо за помощь! –

+0

@ ZoltánSchmidt, все процедуры Allegro 5 требуют использования структуры 'ALLEGRO_COLOR', поэтому сохранение их в виде одиночных целых чисел просто не имеет смысла. Тем не менее простейшим целым представлением RGB будет 'int c = ((r << 16) | (g << 8) | b)', где каждый компонент равен 0-255. Чтобы извлечь, сдвиньте другое направление и маску: 'int g = (c >> 8) & 0xff' – Matthew

+0

О, я вижу. Спасибо! –

Смежные вопросы