2009-11-24 2 views
4

Мне никогда не приходилось делать это раньше и даже не думали об этом раньше. Как я могу или что лучше всего хранить значения RGB в базе данных.Хранить значения RGB в базе данных

Я думал о парах вариантов. Наиболее очевидным является 3 байт столбца для хранения R, G и B. (я не хочу идти по этому маршруту) Другой вариант - сохранить его в 32-битном столбце int. (Я склоняюсь к этому)

или может быть, я просто пропустил что-то тривиальное.

+0

Приятная идея использовать целое число 4 байта! Я думаю, это самый экономичный способ. –

ответ

4

«Впустую» пространство 32-разрядного целочисленного столбца позволит вам также хранить альфа-канал, если возникнет необходимость в этом.

1

Просто сохраните его как 32-битное значение. Нет смысла разбивать на 3 поля, так как вы, скорее всего, захотите, чтобы все 3 компонента были вместе.

0

Мое предположение - хранить 32-битное целое число.

Однако, если ваши операции SQL требуют, чтобы каждый компонент имел отдельные столбцы (что означает, что вам нужно сравнить значения R vs G другого столбца, например), вам придется выделять значения в отдельные столбцы. R, G, B, каждое целое число 0-255.

2

Значения RGB обычно описываются в Интернете в формате 0xRRGGBB, где RR, GG и BB являются шестнадцатеричными значениями R, G и B. Хотя вы можете тратить немного места на 32-битный int, Я не могу себе представить, что это сильно по сравнению с тем преимуществом, которое вы потенциально выиграете от хранения значений в хорошо известном формате.

Если вам нужна быстрая грунтовка о том, как перейти к конверсии, то вы получите покрытие!

4

Прежде всего: каковы ваши требования?

Вам нужно получить цвет и только цвет? Вам когда-либо нужно запрашивать компоненты? вам нужно искать по цветовому расстоянию? Вам нужно хранить информацию о цветовом пространстве (Adobe RGB или sRGB)? См. Также Best Way to represent a color in SQL.

+0

Мне просто нужно было получить цвет. Спасибо за ссылку и ответ –

2

Если вы сохраняете эти номера для веб-дизайна, я бы предложил просто использовать символ (6) и сохранить строку шестнадцатеричных триплетов.

Несомненно, это два байта, «потраченных впустую» на 32-разрядное целое число, но если вы каким-то образом не сравниваете их математически и просто чередуете их с файлом CSS, например, сохранение в виде строки приведет к удалению нужно переводить туда и обратно.

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

Если вы занимаетесь чем-то другим, кроме работы с веб-сайтом, вы можете захотеть построить в помещении более 8 бит на канал.

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