在SQL数据库中表示颜色的最佳方法?

时间:2009-09-10 16:53:00

标签: .net sql sql-server tsql data-modeling

如果我使用的是.Net和SQL Server 2008,那么在数据库中存储颜色的最佳方法是什么?我应该使用ToString还是将其转换为整数或其他内容?

编辑:

我想要的颜色是能够检索它并在屏幕上以指定的颜色绘制一些东西。我不需要能够查询它。

6 个答案:

答案 0 :(得分:16)

如何以原生方式存储颜色?

如果您只是使用0xRRGGBB格式,您也可以将其存储为数据库中的整数,并在SELECT时为了可读性而对其进行重新缩放。

答案 1 :(得分:11)

如何在数据库中存储信息取决于您打算如何使用和访问它。没有必要说明存储它的最佳方法是不知道你将如何使用它。

答案 2 :(得分:6)

在某些行业,如数码相机,桌面出版,sanners等,色彩可能会非常棘手。大多数程序员将颜色与24位颜色(通常为RGB)相关联,有些则将其与32位(RGBA)相关联。在像DTP这样大量使用颜色的行业中工作的少数人有更丰富的术语,包括色彩校正,color space等等。那你究竟需要存储什么?

  • 您是否需要存储一个不会改变的格式?
  • 您是否需要存储多种格式并知道实际存储的格式(RGB与RGBA对比CMY与HSV etv)?请注意,即使是像RGB一样简单的东西实际上也可以是Adobe RGBsRGB
  • 您需要存储色彩空间和校正吗?请注意,RGB颜色通常没有{/ 3}}的含义。
  • 您是否需要存储简单的文字说明('红色','石灰','青色'等)?
  • 您是否需要存储'网页'颜色(即RGB或RGBA为十六进制)?

答案 3 :(得分:3)

如果要存储System.Drawing.Color,则需要存储代表alpha和3色通道的4个字节。您可以使用int数据类型。

如果您要存储System.Windows.Media.Color(来自WPF),根据您使用的用途,有两种可能:

  1. 如果您只使用ARGB颜色,请存储为int数据类型。
  2. 如果您使用的是ScRGB格式,则需要存储4个浮点(单个)值。我建议用两种方式存储它:
    1. 具有4个浮点字段的用户定义类型。
    2. varchar(长度取决于精度)并存储
      color.ToString(CultureInfo.InvariantCulture)

答案 4 :(得分:2)

好吧,我将它们存储为六位十六进制代码。这开启了实际搜索其他颜色之间颜色的有趣可能性。如果你真的想让它变得强大,请将R,G,B十六进制数保存在三列中。这样可以找到包含太多红色的颜色,或者与另一种颜色相似的颜色(按三个值的平均差异排序)。

答案 5 :(得分:1)

取决于您想要存储的颜色类型。例如。如果它来自固定的调色板,则短整数或甚至无符号字节可能就足够了。

3字节RGB或4字节ARGB(A = alpha,即透明度)可以适合32位,因此32位无符号整数类型可以工作。这是大多数应用程序的标准。 但是,您可能需要更多 - 在这种情况下可能需要64位无符号整数。

或者,如果你想根据它的组件修改或查询颜色,我会将每个组件存储为它自己的unsigned int(即红色,绿色,蓝色,Alpha字段)。