【问题标题】:C# How to send colorDialog value in 5bitRGB to a textBox?C#如何将5bitRGB中的colorDialog值发送到文本框?
【发布时间】:2017-08-29 21:32:14
【问题描述】:

所以我正在创建一个 PS2 游戏的编辑器。而且这个游戏有两种颜色的“系统”。

“正常”RGB R:0 到 255 G:0 到 255 B:0 到 255。

我认为是 5bitRGB R:0 到 31 G:0 到 31 B:0 到 31。

为了在游戏中改变颜色,我必须将 colorDialog 中选择的值转换为十六进制,例如:R: 255 G: 176 B: 15 In Hexadecimal代表FFB00F。

然后稍后通过 Hex 在 3 个字节的“槽”中更改这些值。

目前为止美得这么好,但 5bitRGB 只有 2 个字节的“槽”。

示例:5bitRGB R:31 G:0 B:0 十六进制 1F80。

这就是我不知道该怎么做的地方,因为普通RGB的颜色我可以将十六进制的值发送到文本框。

然后我通过十六进制将这些值 textBox 保存在 3 个字节的“槽”中。

同时 5bitRGB 颜色通过 Hex 变化的插槽它们只是 2 个字节的“插槽”。

所以我必须将转换后的 colorDialog 值发送到 2 个字节的 textBox 的 5bitRGB,这真的可能吗?

【问题讨论】:

    标签: c# hex rgb


    【解决方案1】:

    为什么不直接用这种形式把RGB转成5位RGB呢?

    int _8bitR = _5bitR * 31 / 255;
    int _8bitG = _5bitG * 31 / 255;
    int _8bitB = _5bitB * 31 / 255;
    

    因为我从你的问题中了解到你需要这些值,而十六进制不是你想要的。

    【讨论】:

      【解决方案2】:

      这有点小技巧,但我认为它工作正常(可能需要一些改进)。

          public static void Main()
      {
          int red = 0;
          int green = 255;
          int blue = 0;
      
          //convert to 5-bit values
          red = red >> 3;
          green = green >> 3;
          blue = blue >> 3;
      
          //position them correctly
          red = red << 8;
          blue = blue << 2;       
          int greenH = green >> 3;
          int greenL = green << 13;
      
          //add the 'always on' bit
          int fiveBitRGB = 0x80;
      
          //or them all together
          fiveBitRGB = fiveBitRGB | red | blue | greenH | greenL;
          fiveBitRGB = fiveBitRGB & 0xffff;
      
          Console.Write("Hex: {0:X4}", fiveBitRGB);
      }
      

      【讨论】:

        猜你喜欢
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        • 2016-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多