为什么setpixel设置的像素在getpixel中返回不同的值?

时间:2013-12-14 09:49:52

标签: c# getpixel argb

这是我的情景:

我在C#中使用color.fromargb来获取一个高达800的int颜色(可以通过toargb反转)。

我在位图中将某个像素(例如:0,0)设置为该颜色并将其保存为jpg,当使用getpixel获取该颜色并返回int时,我收到的负值让我感到困惑。 有什么想法和建议吗?

1 个答案:

答案 0 :(得分:2)

我怀疑这里有两件事情在发挥作用。

首先,JPEG是一种有损格式,因此您输入的数字可能不是您输出的确切数字,真正的黑色可能会变成灰色。

其次,当你从一个正数开始时,你为什么会得到负数?嗯,这一切都是intuint,颜色用二进制表示。

在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。