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



这是我的场景:

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

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

我怀疑有两件事在起作用。

首先,JPEG是一种有损格式,所以你输入的数字可能不是你输出的确切数字,真正的黑色很可能变成灰色。

其次,当你从一个正数开始时,为什么你会得到一个负数?这完全取决于intuint以及颜色用二进制表示的方式。

在RGB表示法中,黑色在ARGB中具有十六进制值#ffffff,它是#ffffffff

十六进制的0xffffffff是十进制的4294967295。

然而,int是一种有符号类型,这意味着它用二的补码表示表示

如果设置了数字中位的最高位,则需要扣除-2147483648;即十六进制0x80000000。

因此,0xffffff变为2147483647-2147483648=-1。

如果你的黑色变成了像#ffeeeeee那样的轻微灰色,那么它在2的补码中的十进制值将是-214365166。

最新更新