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

问题描述:

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

编辑:

所有我从颜色要的是能够检索,并在屏幕上绘制一些在指定的颜色。我不需要能够查询它。

颜色是如何原生存储的?

如果你只是使用0xRRGGBB格式,你可以将它作为一个整数存储在数据库中,当你为了便于阅读而重新整理它时。

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

+0

史蒂夫卡斯。我在5年内没有见过你的名字! – 2009-09-10 17:39:12

+0

+1当然,与任何*数据一样。查找在0x40到0x50之间查找所有像素为“green”的查询将受益于存储到单独的R,G和B组件(各自编制索引)中。一个要求在10个“透明像素”。记录需要将A通道分开。或者一些查询会要求'亮度'并且需要HSV/HSL格式。 – 2009-09-10 18:00:29

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

  • 你需要存储一个不会改变的格式吗?
  • 您是否需要存储多种格式并知道实际存储的格式(RGB与RGBA与CMY比较HSV etv)?请注意,甚至像RGB这样简单的东西实际上可以是Adobe RGBsRGB
  • 您是否需要存储色彩空间和更正?注意经常RGB颜色没有意义W/O适当color management
  • 你需要存储一个简单的文字描述('红','石灰','深青色'等)?
  • 您是否需要存储'网页'颜色(即RGB或RGBA为十六进制)?

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

+0

即将表明我自己。 HEX-colors是要走的路,imo。 – roosteronacid 2009-09-10 17:36:09

如果您要存储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)

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

3字节RGB或4字节ARGB(A = alpha,即透明度)可以适合32位,所以32位无符号整数类型可以工作。这是大多数应用程序的标准。 但是,您可能需要更多 - 在这种情况下,可能需要64位无符号整数。或者,如果你想根据其组件来修改或查询颜色,我会将每个组件存储为它自己的无符号整型(即红色,绿色,蓝色,Alpha字段)。