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

C# 为什么setpixel设置的像素在getpixel中返回不同的值?,c#,getpixel,argb,C#,Getpixel,Argb,以下是我的设想: 我正在使用C#中的color.fromargb从整数中获取一个高达800的颜色(可以通过toargb反转) 我将位图中的某个像素(例如:0,0)设置为该颜色,并将其保存为jpg,当使用getpixel返回该颜色和该int时,我收到一个负值,这让我感到困惑。 有什么想法和建议吗?我想这里有两件事在起作用 首先,JPEG是一种有损格式,因此输入的数字可能与输出的数字不同,真正的黑色可能会变成灰色 第二,当你从一个正数开始时,为什么会得到一个负数?好的,这都是int和uint的方式,

以下是我的设想:

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

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

我想这里有两件事在起作用

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

第二,当你从一个正数开始时,为什么会得到一个负数?好的,这都是
int
uint
的方式,颜色用二进制表示

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

十六进制的
0xffffff
是十进制的4294967295

但是,
int
是有符号类型,这意味着它在

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

所以0xFFFFFF变为2147483647-2147483648=-1


如果你的黑色变成了像#ffeeeeee一样的浅灰色,那么它在2的补码表示法中的十进制值将是-2146365166。

你能发布一些问题代码吗?你可能忽略了最高字节alpha。它通常是255,当你读回它时会产生一个负值。谢谢。它实际上让我使用元数据在位图中包含这些整数