2009-11-24 81 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位以上的空间。