C# 如何将 5 位 RGB 中的 colorDialog 值发送到文本框?



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

"正常"RGB R:0 到 255 G:0 到 255B:0 到 255。

或者我认为它是 5bitRGB R

:0 到 31 G:0 到 31 B:0 到 31。为了使游戏中的颜色发生变化,我必须转换十六进制颜色对话框中的选定值,例如:R:255 G:176 B:15 十六进制代表FFB00F。

然后通过十六进制在 3 字节的"插槽"中更改这些值。

到目前为止,美女一切顺利,但 5 位 RGB 只有 2 个字节的"插槽"。

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

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

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

同时 5bitRGB 颜色的插槽通过十六进制更改 它们只是 2 个字节的"插槽"。

所以我必须将转换后的 colorDialog 值发送到 5 位 RGB 的 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);
}

为什么不直接以这种形式将 RGB 转换为 5 位 RGB?

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

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

最新更新