2017-04-04 68 views
0

所以我创建了一个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个字节,这是真的可能吗?

回答

0

这是一个黑客,但我认为它工作正常(可能需要一些改进)。

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); 
} 
0

为什么不直接在此格式中将RGB转换为5位RGB?

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

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

相关问题