我希望能够在我的数据库应用程序中存储面板的背景色。

该值可以是具体的颜色,也可以是空的,表示它已从父级继承。

我想通过调用System.Drawing.Color.ToArgb()方法将其存储在不可为null的int字段中。

对于白色,此方法的返回值似乎是-1,对于黑色,返回值是-16777216。

所以我在想,为了表示未选择任何颜色,我可以存储一个正整数。这将提供一种非常简单的方法来检查是否已存储显式颜色或未存储任何颜色。

现在我想知道System.Drawing.Color.ToArgb()能否返回正值是否有合法原因。 (此函数可能的返回值范围是多少)。

我还没有篡改过Alpha通道,所以我不知道这是否会产生影响。

如果我不能存储一个正整数来表示显色的缺席,我想我只需要使该字段可为空即可。...

最佳答案

好吧,您将获得一个包含Alpha,Red,Green和Blue的32位整数,它们各自填充8位。

Alpha值的最高位为8位,因此对于每种不透明的颜色,您在0xFF处都具有这些颜色(如果是有符号整数,该整数将自动为负)。

因此,如果您的Alpha值降至128(0x80)以下,您将获得正色值。

该函数的可能返回值范围实际上是0x000000000xFFFFFFFF,换句话说:每个可能的32位整数。对于带符号的int,这是−2147483648至+2147483647。

在您的情况下,我绝对会允许使用NULL值,因为这实际上是您想要的。但是,如果您完全放弃alpha值,则还有另外8位信息。因此,您可以实施它来检查负值/非负值。

关于c# - .ToARGB()返回值的范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1599890/

10-12 07:27
查看更多