【问题标题】:Calculate RGB Int from Color in C#在 C# 中根据颜色计算 RGB Int
【发布时间】:2019-09-23 14:09:01
【问题描述】:

我想重现 this site 在 C# 中所做的事情

这是我尝试过的:

Color whiteColor = Color.White;
int intWhiteColor = whiteColor.ToArgb();

这是我得到的:-1

这是我所期待的:16777215

我尝试搜索几乎所有我能想到的东西,但最终找不到我想要的东西。

这很有可能是重复的,我真的很抱歉,如果是这样,请给我链接。

【问题讨论】:

  • int intColor = (redColor.R << 16) | (redColor.G << 8) | (redColor.B);
  • result is -65536 这是预期值 (0xffff0000)
  • @Selvin 预期值为16777215
  • 很好,正在使用移位运算符...public static uint MyColorToUInt(Color color) { return (uint)((color.A << 24) | (color.R << 16) | (color.G << 8) | (color.B << 0)); }
  • 16711680 not 16777215 16777215 是白色的

标签: c# colors


【解决方案1】:

一个简单的位算术就可以了:

 int intColor = (redColor.R << 16) | (redColor.G << 8) | (redColor.B);

请注意,Color.Red 具有 R = 255; G = 0; B = 0(纯 红色 颜色),因此

 int intColor == 16711680

Color.WhiteR = 255; G = 255; B = 255

 int intColor == 16777215

【讨论】:

  • 我更愿意使用Color 对象的RGB 属性。您无法保证,在调用ToArgb() 之后,您将按该顺序获得字节。 RGB 为您提供保证。这就是 OOP 的全部意义所在。
  • @Simore:对不起,不要关注你:Color redColor 的类型是 Color 我得到了 RGB 的属性(它们是类型为byte) 并制作一个最终的int intColor。当然,我不会尝试 mask intColor(这是一个坏主意,正如你所说的那样) - (intColor &amp; 0xFF) &lt;&lt; 16...
  • 对不起,你是对的(取消投票):我完全误读了你的答案!
【解决方案2】:

ToArgb() 返回一个 32 位整数,即 4 个字节,其中每个字节对应 Alpha、Red、Green 和 Blue。所以,对于“红色”,它会是

FF FF 00 00

转换为十进制 -65,536(我不确定你为什么得到 -1)。你想要的是这样的东西:

string hexcode = string.Format("{0:X2}{1:X2}{2:X2}", redColor.R, redColor.G, redColor.B);

【讨论】:

    猜你喜欢
    • 2016-02-29
    • 2020-04-04
    • 2012-12-13
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    相关资源
    最近更新 更多