0

这是我的场景:

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

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

4

1 回答 1

2

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

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

其次,为什么从正数开始会得到负数?好吧,这完全取决于方式intuint并且颜色以二进制表示。

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

于 2013-12-14T10:12:24.520 回答