2009-10-21 219 views
0

我希望能夠在我的應用程序中爲數據庫中的面板存儲背景顏色。.ToARGB()返回值的範圍

該值可以是具體顏色或爲空,表示它已從父級繼承。

我想通過調用System.Drawing.Color.ToArgb()方法將它存儲在不可爲空的int字段中。

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

所以我在想,用於指示已經沒有選擇的顏色,我可以存儲一個正整數。這將提供一種非常簡單的方法來檢查是否存儲了明確的顏色或者沒有存儲顏色。

現在我想知道爲什麼System.Drawing.Color.ToArgb()可以返回正值是否存在限制原因。 (這個函數的可能返回值的範圍是多少)。

我尚未與alpha通道篡改身邊,所以我不知道這是否會有影響....

如果我不能夠存儲一個正整數,以指示abscence一個明確的顏色,我想我只需要使該字段爲空......

回答

4

那麼,你會得到一個32位整數包含阿爾法,紅色,綠色和藍色,他們每個填充8位。

alpha值是最高8位,因此對於每個不透明顏色,您在0xFF(如果它是一個有符號整數,會自動使該整數爲負)。

所以,如果你的alpha值降到128以下(0x80),你會得到正面的顏色值。

該函數的可能返回值的範圍實際上是0x000000000xFFFFFFFF,換句話說:每個可能的32位整數。對於有符號整數,這是− 2147483648到+2147483647。

在你的情況,我一定會去允許NULL值,因爲這實際上是你想要的。但是,如果完全刪除Alpha值,則還有8位信息。所以你可以然後執行它檢查負/非負值。

1

引述from MSDN

32位ARGB 值的字節順序是AARRGGBB。最高 有效字節(MSB),由 AA表示,是alpha分量值。所述 第二,第三和第四個字節, 由RR,GG和BB, 分別表示,是顏色分量 紅色,綠色,和藍色,分別

它是一個32位字段。前8位用於alpha通道。當MSB爲1時,它總是會給你一個負值。 當它變成0時,你可以得到正值。我希望你瞭解值的存儲方式以及符號位如何影響它?

當AA從11111111b下降到0xxxxxxxb,那麼期望得到正值。

恕我直言,可空領域是一種方式。