这是我的场景:
我在 C# 中使用 color.fromargb 从 int 中获取颜色,最高可达 800(可以通过 toargb 反转)。
我在位图中将某个像素(例如:0,0)设置为该颜色并将其保存为 jpg,当使用 getpixel 获取该颜色和该 int 时,我收到一个负值,这让我感到困惑。有什么想法和建议吗?
我怀疑这里有两件事在起作用。
首先,JPEG 是一种有损格式,因此您输入的数字可能不是您输出的确切数字,真正的黑色可能会变成灰色。
其次,为什么从正数开始会得到负数?好吧,这完全取决于方式int
,uint
并且颜色以二进制表示。
在 RGB 符号中,黑色#ffffff
在 ARGB 中具有十六进制值,它是#ffffffff
.
0xffffffff
十六进制是十进制的 4,294,967,295。
然而 anint
是有符号类型,这意味着它表示为 二进制补码表示
如果设置了数字中位中的最高位,则需要减去-2,147,483,648;即十六进制 0x80000000。
所以 0xffffffff 变为 2,147,483,647 - 2,147,483,648 = -1。
如果你的黑色变成像#ffeeeeee 这样的浅灰色,那么它在二进制补码表示法中的十进制值将是 -2,146,365,166。