代码之家  ›  专栏  ›  技术社区  ›  Colin Desmond

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

  •  8
  • Colin Desmond  · 技术社区  · 16 年前

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

    编辑:

    我只想从颜色中找到它,并在屏幕上画出特定颜色的东西。我不需要对它提出质疑。

    6 回复  |  直到 15 年前
        1
  •  16
  •   Mark Rushakoff    16 年前

    颜色是如何存储在本地的?

    如果您只是使用0xrrggbb格式,那么您也可以将其存储为数据库中的整数,并在您 SELECT (为了可读性)。

        2
  •  11
  •   Steve Kass    16 年前

    如何在数据库中存储信息取决于您打算如何使用和访问它。在不知道如何使用它的情况下,没有人会说存储它的最佳方法是什么。

        3
  •  6
  •   Remus Rusanu    16 年前

    在数码相机、桌面出版、Sanner等行业,色彩可能会变得异常复杂。大多数程序员将颜色与24位颜色(通常是RGB)关联起来,有些程序员将其与32位(RGBA)关联起来。在像DTP这样大量使用颜色的行业中工作的少数人有一套更丰富的术语,包括颜色校正。 color space 等等。那么你到底需要储存什么呢?

    • 是否需要存储一个不会更改的格式?
    • 是否需要存储多种格式并知道实际存储的格式( RGB vs.rgba vs.cmy vs. HSV ETV)?请注意,即使像rgb这样简单的东西实际上也可以 Adobe RGB sRGB .
    • 是否需要存储颜色空间和更正?注意:通常,RGB颜色没有正确的含义。 color management .
    • 是否需要存储简单的文本描述(“红色”、“石灰”、“青色”等)?
    • 您是否需要存储“web”颜色(即RGB或RGB作为十六进制)?
        4
  •  3
  •   Pierre-Alain Vigeant    16 年前

    如果您正在存储 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)
        5
  •  2
  •   Sudhir Jonathan    16 年前

    好吧,我会把它们存储为六位数的十六进制代码。这就打开了在其他颜色之间搜索颜色的有趣可能性。如果你真的想让它强大,把r,g,b十六进制数保留在三列中。这样可以找到包含太多红色的颜色,或与其他颜色相似的颜色(按三个值的平均差排序)。

        6
  •  1
  •   winwaed    15 年前

    这在很大程度上取决于你想要储存的颜色类型。如果它来自一个固定的调色板,那么一个短整型甚至一个无符号字节就足够了。

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

    或者,如果您想根据颜色的组成部分修改或查询颜色,我会将每个组件存储为它自己的无符号int(即红色、绿色、蓝色、alpha字段)。