C# 为什么setpixel设置的像素在getpixel中返回不同的值?
以下是我的设想: 我正在使用C#中的color.fromargb从整数中获取一个高达800的颜色(可以通过toargb反转) 我将位图中的某个像素(例如:0,0)设置为该颜色,并将其保存为jpg,当使用getpixel返回该颜色和该int时,我收到一个负值,这让我感到困惑。C# 为什么setpixel设置的像素在getpixel中返回不同的值?,c#,getpixel,argb,C#,Getpixel,Argb,以下是我的设想: 我正在使用C#中的color.fromargb从整数中获取一个高达800的颜色(可以通过toargb反转) 我将位图中的某个像素(例如:0,0)设置为该颜色,并将其保存为jpg,当使用getpixel返回该颜色和该int时,我收到一个负值,这让我感到困惑。 有什么想法和建议吗?我想这里有两件事在起作用 首先,JPEG是一种有损格式,因此输入的数字可能与输出的数字不同,真正的黑色可能会变成灰色 第二,当你从一个正数开始时,为什么会得到一个负数?好的,这都是int和uint的方式,
有什么想法和建议吗?我想这里有两件事在起作用 首先,JPEG是一种有损格式,因此输入的数字可能与输出的数字不同,真正的黑色可能会变成灰色 第二,当你从一个正数开始时,为什么会得到一个负数?好的,这都是
int
和uint
的方式,颜色用二进制表示
在RGB表示法中,黑色具有十六进制值,在ARGB中为#ffffff
十六进制的0xffffff
是十进制的4294967295
但是,int
是有符号类型,这意味着它在
如果设置了数字位中的最高位,则需要扣除-2147483648;即十六进制0x8000000
所以0xFFFFFF变为2147483647-2147483648=-1
如果你的黑色变成了像#ffeeeeee一样的浅灰色,那么它在2的补码表示法中的十进制值将是-2146365166。你能发布一些问题代码吗?你可能忽略了最高字节alpha。它通常是255,当你读回它时会产生一个负值。谢谢。它实际上让我使用元数据在位图中包含这些整数