如果我使用的是 .Net 和 SQL Server 2008,那么在数据库中存储颜色的最佳方式是什么,我应该使用 ToString 还是将其转换为整数或其他方式?
编辑:
我想要从颜色中检索它并以指定的颜色在屏幕上绘制一些东西。我不需要能够查询它。
如果我使用的是 .Net 和 SQL Server 2008,那么在数据库中存储颜色的最佳方式是什么,我应该使用 ToString 还是将其转换为整数或其他方式?
编辑:
我想要从颜色中检索它并以指定的颜色在屏幕上绘制一些东西。我不需要能够查询它。
颜色是如何本地存储的?
如果你只是使用 0xRRGGBB 格式,你也可以将它作为一个整数存储在数据库中,并在你使用时重新十六进制SELECT
(为了可读性)。
如何在数据库中存储信息取决于您打算如何使用和访问它。在不知道如何使用它的情况下,没有人说最好的存储方式是什么。
在某些行业,如数码相机、桌面出版、sanners 等,颜色可能会非常棘手。大多数程序员将颜色与 24 位颜色(通常为 RGB)相关联,有些程序员将其与 32 位(RGBA)相关联。在像 DTP 这样大量使用色彩的行业中工作的少数具有更丰富的术语集,包括色彩校正、色彩空间等等。那么你究竟需要存储什么?
如果要存储System.Drawing.Color
,则需要存储代表 alpha 和 3 个颜色通道的 4 个字节。您可以使用int
数据类型。
如果您正在存储System.Windows.Media.Color
(来自 WPF),则根据您使用的用途有两种可能性:
int
数据类型。color.ToString(CultureInfo.InvariantCulture)
好吧,我会将它们存储为六位十六进制代码。这开启了在其他颜色之间实际搜索颜色的有趣可能性。如果你真的想让它变得更强大,请将 R、G、B 十六进制数字保留在三列中。这使您可以找到包含如此多红色的颜色,或与另一种颜色相似的颜色(按三个值的平均差异排序)。
很大程度上取决于您要存储的颜色类型。例如。如果它来自固定调色板,那么一个短整数甚至一个无符号字节可能就足够了。
3 字节 RGB 或 4 字节 ARGB(A=alpha,即透明度)可以放入 32 位,因此 32 位无符号整数类型可以工作。这是大多数应用程序的标准。但是,您可能需要更多 - 在这种情况下,可能需要 64 位无符号整数。
或者,如果您想根据其组件修改或查询颜色,我会将每个组件存储为自己的无符号整数(即红色、绿色、蓝色、Alpha 字段)。