【问题标题】:why the pixel set by setpixel returns a different value in getpixel ?为什么 setpixel 设置的像素在 getpixel 中返​​回不同的值?
【发布时间】:2013-12-14 09:49:52
【问题描述】:

这是我的场景:

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

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

【问题讨论】:

  • 你能发布一些问题的代码吗?
  • 您可能忽略了最高字节 alpha。它通常是 255,当你读回它时会产生一个负值。

标签: c# getpixel argb


【解决方案1】:

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

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

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

在 RGB 表示法中,黑色的十六进制值 #ffffff 在 ARGB 中是 #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。

【讨论】:

  • 谢谢..它实际上引导我使用元数据将这些整数包含在我的位图中
猜你喜欢
  • 2011-07-07
  • 1970-01-01
  • 2021-02-10
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2014-02-10
相关资源
最近更新 更多