這裏是我的場景:爲什麼由setpixel設置的像素在getpixel中返回不同的值?
我在C#中使用color.fromargb從int獲得顏色高達800(這可以通過toargb反轉)。
我將位圖中的某個像素(例如:0,0)設置爲該顏色並將其保存爲jpg,並且當使用getpixel獲取該顏色並返回int時,我會收到一個令人困惑的負值我。 有什麼想法和建議?
這裏是我的場景:爲什麼由setpixel設置的像素在getpixel中返回不同的值?
我在C#中使用color.fromargb從int獲得顏色高達800(這可以通過toargb反轉)。
我將位圖中的某個像素(例如:0,0)設置爲該顏色並將其保存爲jpg,並且當使用getpixel獲取該顏色並返回int時,我會收到一個令人困惑的負值我。 有什麼想法和建議?
我懷疑這裏有兩件事。
首先,JPEG是一種有損格式,因此您輸入的數字可能不是確切的數字,真正的黑色可能會變成灰色。
其次,爲什麼當你從一個正數開始時會得到一個負數?那麼這一切都可以用int
和uint
的方式,顏色用二進制表示。
在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。
謝謝..它實際上導致我使用元數據將這些整數包含在我的位圖中 –
你能發表一些問題的代碼嗎? –
您可能忽略* alpha *,最高字節。它通常是255,當你讀回它時產生一個負值。 –