2013-12-14 25 views
0

這裏是我的場景:爲什麼由setpixel設置的像素在getpixel中返回不同的值?

我在C#中使用color.fromargb從int獲得顏色高達800(這可以通過toargb反轉)。

我將位圖中的某個像素(例如:0,0)設置爲該顏色並將其保存爲jpg,並且當使用getpixel獲取該顏色並返回int時,我會收到一個令人困惑的負值我。 有什麼想法和建議?

+0

你能發表一些問題的代碼嗎? –

+0

您可能忽略* alpha *,最高字節。它通常是255,當你讀回它時產生一個負值。 –

回答

2

我懷疑這裏有兩件事。

首先,JPEG是一種有損格式,因此您輸入的數字可能不是確切的數字,真正的黑色可能會變成灰色。

其次,爲什麼當你從一個正數開始時會得到一個負數?那麼這一切都可以用intuint的方式,顏色用二進制表示。

在RGB表示法黑具有ARGB十六進制值#ffffff它是#ffffffff

0xffffffff(十六進制)是十進制的4,294,967,295。

但是一個int是有符號類型,這意味着它在two's complement representation

表示。如果在數位的最高位被設置,那麼你需要扣除-2,147,483,648;即十六進制0x80000000。

So 0xffffffff變成2,147,483,647-2,147,483,648 = -1。

如果你的黑色像#ffeeeeee那樣變成了灰色,那麼它的二進制補碼錶示法中的十進制值就是-2,146,365,166。

+0

謝謝..它實際上導致我使用元數據將這些整數包含在我的位圖中 –

相關問題