8

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

编辑:

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

4

6 回答 6

16

颜色是如何本地存储的?

如果你只是使用 0xRRGGBB 格式,你也可以将它作为一个整数存储在数据库中,并在你使用时重新十六进制SELECT(为了可读性)。

于 2009-09-10T16:55:10.410 回答
11

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

于 2009-09-10T17:04:45.763 回答
6

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

  • 您是否需要存储不会改变的单一格式?
  • 您是否需要存储多种格式并知道实际存储的格式(RGB vs. RGBA vs. CMY vs. HSV etv)?请注意,即使是看似简单的 RGB 实际上也可以是Adob​​e RGBsRGB
  • 您需要存储色彩空间和校正吗?请注意,如果没有适当的颜色管理,RGB 颜色没有任何意义。
  • 您是否需要存储简单的文本描述('red'、'lime'、'teal' 等)?
  • 您是否需要存储“网络”颜色(即 RGB 或 RGBA 为十六进制)?
于 2009-09-10T17:26:11.197 回答
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)
于 2009-09-10T18:01:06.557 回答
2

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

于 2009-09-10T17:30:19.687 回答
1

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

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

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

于 2011-01-11T16:00:55.567 回答