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