2009-11-24 153 views
4

我從來沒有這樣做過,甚至從來沒有想過這個。我怎麼能或什麼是在數據庫中存儲RGB值的最佳方式。在數據庫中存儲RGB值

我想到了幾個選項。最明顯的是存儲R,G和B的3字節列(我不想走這條路) 另一個選擇是將它存儲在32位int列中。 (我傾向於這一個)

或者可能是我只是想念一些瑣碎。

+0

好主意使用4字節整數!我想這是最經濟的方式。 – 2013-01-03 23:41:50

回答

4

32位整數列的「浪費」空間將允許您存儲一個alpha通道,並且如果需要的話。

1

只需將其存儲爲32位值即可。將其分解爲3個領域沒有意義,因爲您很可能一直需要將所有3個組件組合在一起。

0

我的猜測是存儲一個32位整數。

但是,如果您的SQL操作要求每個組件都是單個列(意思是說您需要比較另一列的R值與G值),則必須將這些值分隔爲單個列。 R,G,B,每個0-255整數。

2

通常在Web上以格式0xRRGGBB描述RGB值,其中RR,GG和BB是R,G和B的十六進制值。雖然您可能會浪費一點32位int的空間,我無法想象這與將存儲價值以衆所周知的格式獲得的好處相比較。

如果您想快速入門如何進行轉換,請致電wikipedia

4

首要的是:你有什麼要求?

您是否需要檢索顏色和顏色?你是否需要查詢組件?你需要通過色彩空間距離搜索嗎?你需要存儲色彩空間信息(Adobe RGB或sRGB)嗎?另見Best Way to represent a color in SQL

+0

我只需要檢索顏色。感謝您的鏈接和答覆 – 2009-11-24 22:53:00

2

如果你正在存儲這些數字的網頁設計,我會建議簡單地使用char(6)並存儲一串十六進制三元組。

當然,這是兩個字節「浪費」在一個32位整數,但如果你沒有以某種方式數學比較它們,而只是將它們反芻到CSS文件,例如,存儲爲字符串將刪除需要來回翻譯。

不是說六角三元組到整數是一個艱難的翻譯,但做可能最簡單的事情,而不是優化幾個字節可能值得考慮。

如果您正在從事與網絡相關的工作以外的其他工作,您可能需要考慮在每個通道中建立8位以上的空間。