C#如何将5bitRGB中的colorDialog值发送到文本框?
问题描述:
所以我创建了一个PS2游戏的编辑器。这个游戏有两个“系统”的颜色。C#如何将5bitRGB中的colorDialog值发送到文本框?
“正常” RGB R:0〜255 G:0到255 B:0〜255
而或我认为是5bitRGB R:0〜31 G:0〜31 B:0到31.
为了使游戏中的颜色发生变化,我必须将颜色对话框中的所选值以十六进制格式进行转换,例如:R:255 G:176 B:15十六进制表示FFB00F。
然后稍后通过十六进制在3个字节的“插槽”中更改这些值。
目前为止美女很好,但5bitRGB只有2个字节的“插槽”。
示例:5bitRGB R:31 G:0 B:0在Hex 1F80中。
这就是我不知道该怎么做的地方,因为普通RGB的颜色可以将十六进制值发送到文本框。
然后我通过十六进制将这些值textBox保存在3个字节的“槽”中。
同时通过十六进制5bitRGB颜色变化的插槽他们只是2个字节的“插槽”。
所以我必须发送转换colorDialog值为5bitRGB for textBox在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;
因为我从你的问题中了解到你需要这些值,而十六进制不是你想要的。