将RGB值存储在数据库中

时间:2009-11-24 22:34:38

标签: sql-server colors

我从来没有这样做过,从来没有想过这个。我如何或在数据库中存储RGB值的最佳方法是什么。

我想到了几个选项。最明显的一个是3字节列来存储R,G和B.(我不想走这条路) 另一种选择是将其存储在32位int列中。 (我倾向于这一个)

或者我可能只是缺少一些微不足道的东西。

6 个答案:

答案 0 :(得分:4)

首先,您的要求是什么?

你需要检索颜色而只检索颜色吗?你是否需要查询组件?你需要按颜色空间距离搜索吗?您是否需要存储色彩空间信息(Adobe RGB或sRGB)?另请参阅Best Way to represent a color in SQL

答案 1 :(得分:4)

32位整数列的“浪费”空间允许您存储alpha通道,如果有需要的话。

答案 2 :(得分:2)

RGB值通常在网络上以0xRRGGBB格式描述,其中RR,GG和BB是R,G和B的十六进制值。虽然你可能浪费了32位int的空间,我我无法想象它与以一种众所周知的格式存储数值所带来的好处相比更为重要。

如果您想要了解如何进行转换的快速入门,wikipedia让您满意!

答案 3 :(得分:2)

如果您正在为网页设计存储这些数字,我建议您只使用char(6)并存储一串十六进制三元组。

当然,这是两个字节“浪费”在32位整数上,但是如果你不是以某种方式在数学上比较它们并且只是将它们回流到CSS文件,例如,存储为字符串将消除需要来回翻译。

不是说整数的十六进制三元组是一个艰难的翻译,但是做最简单的事情而不是优化几个字节可能值得考虑。

如果您正在做与网络相关的工作以外的其他工作,您可能需要考虑在每个频道内建立超过8位的空间。

答案 4 :(得分:1)

只需将其存储为32位值即可。分解为3个字段是没有意义的,因为您很可能一直希望所有3个组件在一起。

答案 5 :(得分:0)

我的猜测是存储一个32位整数。

但是,如果您的SQL操作要求每个组件都是单独的列(意味着您需要比较另一列的R与G的值),则必须将值分离为单个列。 R,G,B,每个0-255整数。