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